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;
}
为什么打印的是
为什么不是
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);
// 休眠一会
在试试,呵呵