线程同步
线程同步:即当有一个线程在对内存进行操作时,其他线程都不可以对这个内存地址进行操作,直到该线程完成操作, 其他线程才能对该内存地址进行操作,而其他线程又处于等待状态。
即是避免同时操作变量,产生冲突。
POSIX信号量
信号量大于0时,等待信号量的线程被唤醒
sem_init(sem_t* sem, int pshared, unsigned int value)初始化信号量,默认为进程共享的,pshared = 0指定为局部信号量,value为初始值
sem_wait(sem_t* sem)阻塞等待,信号量为0时阻塞
sem_trywait(sem_t* sem)非阻塞等待,信号量为0时返回-1,设置errno为EGAIN
sem_post(sem_t* sem)信号量加1,加减都是原子操作
/封装信号量的类
class sem
{
public:
//创建并初始化信号量
sem()
{
if(sem_init(&m_sem, 0, 0) != 0)
{
throw std::exception();
}
}
sem(int num)
{
if (sem_init(&m_sem, 0, num) != 0)
{
throw std::exception();
}
}
//销毁信号量
~sem()
{
sem_destroy(&m_sem);
}
//等待信号量
bool wait()
{
return sem_wait(&m_sem) == 0;
}
//增加信号量
bool