线程信号量
线程信号量可以实现线程的互斥和线程的同步。
信号量的数据类型:sem_t
信号量本质上是一个非负整数计数器,是共享资源的数目(即共享资源还剩下几个,信号量的值大于或等于0时,线程才不阻塞)
信号量的创建和销毁:
参数:
sem:信号量指针
pshared:是否在进程之间共享;0为不共享,1为共享
value:信号量的初始值;一般为0,线程再调用sem_wait()函数后信号量的值就为-1,将阻塞
信号量的加减操作:
调用sem_post()一次,信号量作加一操作;
调用sem_wait()一次,信号量作减一操作;
当某个线程调用sem_wait()函数后,如果信号量的值小于0,则这个线程将阻塞。只有其他线程调用sem_post()函数对信号量作加操作后,并且信号量的值大于或等于0时,阻塞的线程才能继续运行。
PV操作:
P操作----->减
V操作----->加
sem_post() 加1操作 ====== V(1)
sem_wait() 减1操作 ====== P(1)
实现互斥:
实现同步:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具