- 博客(4)
- 收藏
- 关注
原创 【Linux系统编程】多线程并发:POSIX 信号量(无名&有名)+信号量版生产者-消费者
注意初始化信号量的参数:1)要想在进程间共享,无名信号量必须位于共享内存区域内。2)对于线程间共享的信号量,线程组退出了,无名信号量也就不复存在了。3)无名信号量初始化以后,就可以像操作有名信号量一样操作无名信号量了。4)value:信号量初始值value=1:二值信号量,类似互斥锁 value>1:计数信号量5)pshared: 用于声明信号量是在线程间共享还是在进程间共享。0 表示在线程间共享,非零值则表示信号量将在进程间共享。6)return: 成功返回0,失败返回-1。
2026-11-05 22:58:26
493
1
原创 【LINUX系统编程】多线程并发:条件变量cond和“生产者-消费者模型”
互斥锁保护了数据的安全,而条件变量让线程学会了“优雅地休息”。从线程执行顺序可看出,等生产者把货放进去,按下门铃(调用通知函数),消费者听到铃声醒过来,再去拿货,很有序。仓库没货的时候,消费者不用再疯狂敲门了,直接在门口搬个小板凳睡大觉(阻塞等待),把 CPU 让给别人。可以加个is_over标志位,当生产者不再生产,需要通知消费者,避免永久阻塞,这点很重要。等生产者把货放进去,按下门铃(调用通知函数),消费者听到铃声醒过来,再去拿货。但是,在真实的开发场景中,互斥锁暴露出了一个致命的问题。
2026-11-03 17:56:38
156
原创 【Linux系统编程】多线程并发:读写锁(rwlock)
当多线程访问同一个共享数据,会对数据进行读或写操作,当读进程很多的时候,一个一个用互斥锁未免开销太大,一般“读”这种不改变共享数据的操作之间,不互斥也不会有什么大偏差,而写操作这种会改变数据的操作,互斥是必须的。然而本人又踩了个坑,在我加上写优先属性再去初始化,却忘了删掉之前不带属性的最初版本的初始化,导致重复初始化,覆盖了前面写好的写优先属性,,,,,,4)int pthread_rwlock_unlock(pthread_rwlock_t *__rwlock) 解锁(读/写线程都可)
2026-10-30 18:00:28
181
原创 【Linux系统编程】多线程并发:互斥锁(mutex)初探与踩坑记录
在大二自学Linux系统编程的路上,前面我初步学习了解了Makefile,文件io,进程处理和进程通讯,今天推开了多线程并发的大门,以此稿作学习记录。在多线程环境下,多个线程同时操作同一个共享变量(比如全局变量)时,如果不加控制,就会出现数据混乱(竞态条件)。当多个线程都需要访问同一个变量,同一个临界资源的时候,互斥锁能保证线程互斥的进行,从而保证结果的一致性。互斥锁(Mutex)就像一个房间的门锁,保证了同一时刻只有一个线程能进入房间操作数据。初始化互斥锁 第二个参数是锁属性,NULL为默认。
2026-10-28 22:38:58
278
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅