1、初始化锁
Int pthread_mutex_init(
pthread_mutex_t *mutex, //锁的地址
const pthread_mutexattr_t //设置锁的属性,没有可以填NULL
)
2、阻塞加锁(如果锁是空闲状态,本线程将会获得这个锁;如果锁已经被占用,本线程将排队等待,直到成功的获取锁)
Int pthread_mutex_lock(Pthread_mutex *mutex);
3、非阻塞加锁(这个函数和上一个函数类似,不同的是在锁被占据时立即返回EBUSY,不是挂起等待)
Int pthread_mutex_trylock(pthread_mutex_t *mutex);
4、解锁
Int pthread_mutex_unlock(pthread_mutex *mutex);
5、销毁锁(销毁锁之前,锁必须是空闲状态)
Int pthread_mutex_destroy(pthread_mutex *mutex)
1、初始化条件变量(第二个填NULL即可)
Int pthread_cond_init(pthread_cond_t *cond,pthread_condattr *cond_attr)
2、阻塞等待
Int pthread_cond_wait(pthread_cond_t *cond,pthread_mutex_t *mutex);
3、超时等待
Int pthread_cond_timewait(
pthread_cond_t *code,
pthread_mutex *mutex
struct timespec *time
)
4、唤醒一个等待该条件的线程
Int pthread_cond_signal(pthread_cond_t *cond);
5、唤醒全部等待该条件的所有线程
int pthread_cond_broadcast(pthread_cond_t *cond);
6、销毁条件变量
Int pthread_cond_destroy(pthread_cond_t *cond);
必须得在锁里添加条件变量,条件变量会先解锁然后再上锁
#include
#include
#include
pthread_mutex_t mutex;//锁
pthread_cond_t cond;//条件变量
void *fun(void *arg)
{pthread_mutex_lock(&mutex);pthread_cond_wait(&cond,&mutex);std::cout<<"hhh"<
1、初始化临界区:
InitializeCriticalSection(CRITICAL_SECTION *m_csGetBuffer);
2、进入临界区
EnterCriticalSection(CRITICAL_SECTION *m_csGetBuffer);
3、离开临界区
LeaveCriticalSection(CRITICAL_SECTION *m_csGetBuffer);
4、删除临界区
DeleteCriticalSection(CRITICAL_SECTION *m_csGetBuffer);
1、创建事件
HANDLE hEventA = CreateEventA(
0, // SECURITY_ATTRIBUTES结构指针,可为NULL
FALSE,
// TRUE:表示手动,在WaitForSingleObject后必须手动调用ResetEvent清除信号
// FALSE:表示自动,在WaitForSingleObject后,系统自动清除事件信号
FALSE, //初始状态,FALSE为无信号,TRUE为有信号
0 //事件的名称
);
2 设置为激活触发状态。
SetEvent(hEventA);
3 设置为未激活触发状态。
ResetEvent(hEventA);
4 检测信号,如果未激活,代码就会处于挂起状态,不再往下执行。
WaitForSingleObject(hEventA, INFINITE);
1、创建互斥量
HANDLE hMutex1 = CreateMutex(NULL, FALSE, NULL);
2、打开互斥量
OpenMutex(hMutex1)
3、释放互斥量
ReleaseMutex(hMutex1)
4、等待互斥量对象
WaitForMultipleObjects(hMutex1)