[GNU/Linux]互斥体和信号量

互斥体:概念请参考《应用篇》里的讲解。
在pthread库中提供互斥体的实现。
创建Mutex对象
pthread_mutex_t hMutex;
pthread_mutex_init(&hMutex, NULL);  // 创建
pthread_mutex_destroy(&hMutex);  // 销毁

 

使用Mutex
// 获取锁,阻塞等待。。。
if(pthread_mutex_lock(&hMutex) ==0)
{
//… 访问共享数据 …
// 释放锁
pthread_mutex_unlock(&hMutex);
}

 

另一种方式:trylock, 如果不能获锁,则立即返
回。
// 获取锁,阻塞等待。。。
if(pthread_mutex_trylock(&hMutex) == 0)
{
//… 访问共享数据 …
// 释放锁
pthread_mutex_unlock(&hMutex);
}

 

信号量:概念请参考《应用篇》里的讲解。
#include <unistd.h>
#include <semaphore.h>
创建Semaphore对象
sem_t hSem;
sem_init(&hSem, 1, initial_value);
sem_destroy(&hSem);

wait/post操作
sem_wait(&hSem);
sem_post(&hSem);
超时等待 sem_timedwait

 

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注