linux中四种进程或线程同步互斥的方法:

1、临界区:多线程串行化访问公共资源的一段代码
2、互斥量:互斥对象只有一个
3、信号量:控制一个有限数量的用户资源,进程上下文,适合长时间访问共享资源情况
4、自旋锁:适合短时间访问共享资源情况
5、事件:通知线程有一些事件已经发生,从而启动后面任务的开始

1、临界区:atomic

某一时刻只有一个线程能访问关键数据的简便方法。原子操作共享资源。临界区外的线程会被挂起进入等待状态,会影响性能,所以不允许其运行事件太长

2、互斥量:mutex_lock

只有拥有互斥对象(即互斥量)的线程才具有访问共享资源的权限,互斥量只有一个,所以不能被多个线程同时访问
同应用不同线程可以使用共享,不同应用程序间的线程之间也可以使用它来共享

3、信号量:semaphore,down、up

信号允许多个线程同时使用共享资源,和操作系统中PV操作相同,它有同时访问共享资源线程的最大数目,可以使等待资源进程进入休眠状态
信号量S是个整数:
P操作申请资源:
S减1,若减1之后仍大于等于0,则进程继续执行,若减1之后小于0,该进程被阻塞到信号对应的队列中,然后转入进程调度
V操作释放资源:
S加1,相加之后大于0,进程继续执行,若相加之后小于等于0,从信号等待队列中唤醒一个等待进程,然后再返回原进程继续执行或转入进程调度

4、自旋锁:spin_lock

保护共享资源,实现线程同步。若是某线程没有获得锁时会不断的询问和判断自旋锁持有者是否释放了锁,阻塞了,CPU空转

5、事件:

事件对象也可以通过通知操作方式保持线程同步。并可以实现不同进程中的线程同步操作

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部