我从我的大学得到了一个关于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/

10-12 16:09