首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

pthread_mutex_lock 粒度,该如何处理

2014-01-05 
pthread_mutex_lock 粒度代码:#include stdio.h#include unistd.h#include pthread.hstatic pthread

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);
// 休眠一会

在试试,呵呵

热点排行