我从我的大学得到了一个关于n个过程的关键部分问题的项目。我用c编写了2个进程的代码,但是我不知道如何让它在n个进程中工作。linux线程的代码是C语言的。
这是两个进程的代码。
#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;
}
任何帮助都将不胜感激。
谢谢您。:)
最佳答案
使用amutex
#include <pthread.h>
像这样声明互斥锁:
pthread_mutex_t myMutex = PTHREAD_MUTEX_INITIALIZER;
然后在关键部分调用开始时:
pthread_mutex_lock( &myMutex );
在关键章节结束时:
pthread_mutex_unlock( &myMutex );
不管有多少线程正在使用这个关键部分,一次只有一个线程能够访问它
关于c - 如何为n个进程的c中的关键部分编写代码(烘焙算法),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43422744/