读书人

pthread_mutex_lock 粒度,该如何处理

发布时间: 2014-01-05 18:22:55 作者: rapoo

pthread_mutex_lock 粒度
代码:
#include <stdio.h>
#include <unistd.h>
#include <pthread.h>


static pthread_mutex_t g_testlock;


void* thread_func(void* param)
{


while(1)
{
pthread_mutex_lock(&g_testlock);
printf("thread lock\n");
pthread_mutex_unlock(&g_testlock);
printf("thread unlock\n");

}

return NULL;

}

int main()
{
pthread_mutex_init(&g_testlock, NULL);
pthread_t threadId;
pthread_create(&threadId, NULL, thread_func, NULL);
while (1)
{
pthread_mutex_lock(&g_testlock);
printf("main lock \n");
pthread_mutex_unlock(&g_testlock);
printf("main unlock\n");
}


pthread_join(threadId, NULL);
pthread_mutex_destroy(&g_testlock);

return 0;
}

为什么打印的是
pthread_mutex_lock 粒度,该如何处理
为什么不是
main lock
main unlock
thread lock
thread unlock
main lock
main unlock
thread lock
thread unlock
是因为循环太快,不一定每次thread(或者main)都能拿到锁吗

[解决办法]
pthread_mutex_lock(&g_testlock);
pthread_mutex_unlock(&g_testlock);
// 休眠一会


pthread_mutex_lock(&g_testlock);
pthread_mutex_unlock(&g_testlock);
// 休眠一会

在试试,呵呵

读书人网 >C语言

热点推荐