如何确保执行相同功能的两个线程互斥

nis*_*s84 2 c c++ mutex

两个线程将使用相同的func().两个线程应该是互斥的.如何让它正常工作?

(输出应为"abcdeabcde")

char arr[] = "ABCDE";
int len = 5;

void func() {
    for(int i = 0; i <len;i++)
        printf("%c",arr[i]);
}
Run Code Online (Sandbox Code Playgroud)

ken*_*ytm 7

创建互斥锁?假设你正在使用pthread,

static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;

....

void func() {
    int errcode = pthread_mutex_lock(&mutex);
    // deal with errcode...
    // printf...
    errcode = pthread_mutex_unlock(&mutex);
    // deal with errcode...
}
Run Code Online (Sandbox Code Playgroud)

有关教程,请参阅https://computing.llnl.gov/tutorials/pthreads/#Mutexes.

  • @nisnis:不,你必须使用特殊功能.基本代码不是线程感知的(某些语言有一个特殊的`synchronize` /`lock`块,它起到互斥锁的作用,但不是`while`或`if`.) (2认同)