gpt4 book ai didi

c - pthread_mutex_init 与 sem_init(非共享)

转载 作者:太空狗 更新时间:2023-10-29 15:16:36 26 4
gpt4 key购买 nike

我正在考虑更改一些我想在 linux、unix 和 OSX 上运行的代码。代码中有一些调用 sem_init,但 pshared 值设置为零。我读了一些关于 unix 编程的 Rochkind 书,他基本上说未共享的 sem_init 与 pthread_mutex_init 相同,因为它以内存中的二进制方式运行。

问题是 - 我可以安全地将这些 sem_init 更改为 pthread_mutex_init,或者使用 sem_open 来获得此代码的更便携版本吗?

OSX 不支持未命名的信号量,但我猜其他两个支持。我真的不想为 #ifdef(__APPLE__) 或其他东西设置单独的编译标志。

谢谢

最佳答案

互斥量和信号量有不同的语义。互斥锁必须由获得锁的同一个线程解锁。所以锁定/解锁必须在同一个线程中总是成对出现。

信号量更加灵活,因为另一个线程可以发布另一个线程使用的 token 。它们通常用于实现生产者/消费者模式。因此,您必须检查要移植的程序是否符合互斥锁的受限语义。

关于c - pthread_mutex_init 与 sem_init(非共享),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11658979/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com