我的大学有一个关于n个过程的关键部分问题的项目。我已经为c中的2个进程编写了代码但是我无法弄清楚如何让它在n进程中运行。代码在C语言中用于linux线程。
以下是2个进程的代码。
#include <stdio.h>
#include <pthread.h>
#include <stdlib.h>
int flag[2];
int turn;
const int MAX = 1e9;
int ans = 0;
void lock_init(){
flag[0]=flag[1]=0;
turn = 0;
}
void lock(int self){
flag[self]=1;
turn = 1-self;
while(flag[1-self]==1 && turn == 1-self);
}
void unlock(int self){
flag[self]=0;
}
void* func(void *s){
int i=0;
int *limitptr = (int*) s;
int self = *limitptr;
printf("Thread %d in queue for critical section\n",self);
lock(self);
printf("Thread %d in critical section\n",self);
for(i=0;i<MAX;i++){
ans++;
}
printf("Thread %d done counting\n",self);
printf("Thread %d is exiting critical section\n",self);
unlock(self);
}
int main(){
pthread_t p1, p2;
int a=0,b=1;
lock_init();
pthread_create(&p1, NULL, func, &a);
pthread_create(&p2, NULL, func, &b);
pthread_join(p1, NULL);
pthread_join(p2, NULL);
printf("Exiting Main\n");
return 0;
}
任何帮助将不胜感激。 谢谢。 :)
答案 0 :(得分:0)
使用mutex
#include <pthread.h>
像这样声明互斥:
pthread_mutex_t myMutex = PTHREAD_MUTEX_INITIALIZER;
然后在关键部分调用的开头:
pthread_mutex_lock( &myMutex );
并在关键部分结束时致电:
pthread_mutex_unlock( &myMutex );
使用该关键部分的线程数无关紧要,一次只能有一个线程访问它
答案 1 :(得分:-1)
感谢您宝贵的时间和答案。 我找到了解决我的问题的方法,并考虑分享它。我在C中实现了面包店算法。
$output
再次感谢你:)