互斥体:概念请参考《应用篇》里的讲解。
在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