使用互斥锁进行pthread同步

时间:2017-04-22 01:09:51

标签: c multithreading pthreads mutex thread-synchronization

我试图创建2个线程并调用相同的函数来递增计数器" count"来自for循环。但每次运行此代码时,计数器的值都不同。我尝试使用互斥体在线程增加全局静态变量之间进行同步" count"但仍然有价值。

static int  count;
pthread_mutex_t count_mutex;

 void increment()
 {
    pthread_mutex_lock(&count_mutex);
    count++;
    pthread_mutex_unlock(&count_mutex);
}

void *myThreadFun1(void *var)
{
    printf("Thread1\n");
    for(int i=0; i< 10000;i++)
    {
        increment();
    }
    return;
}

int main()
{
    pthread_t tid1;
    pthread_t tid2;
    pthread_create(&tid1, NULL, myThreadFun1, NULL);
    // sleep(1);
    pthread_create(&tid2, NULL, myThreadFun1, NULL);
    pthread_join(tid1, NULL);
    pthread_join(tid2, NULL);

    printf("\n%d",count);
    exit(0);
}

如果我不在线程之间休眠,输出永远不会是20000。

在java中有&#34; synchronized&#34;关键字我们可以使用,但如何在C中实现相同?

1 个答案:

答案 0 :(得分:2)

pthread_mutex_t需要在使用前进行初始化。它必须开始解锁和解除绑定。有一个调用,pthread_mutex_init(&amp; theMutex)可以执行此操作,或者可以为静态init分配预定义值:PTHREAD_MUTEX_INITIALIZER