答案 0 :(得分:2)
应用程序代码应该使用posix线程函数。我假设你有手册页,所以键入
man pthread_mutex_init
man pthread_rwlock_init
man pthread_spin_init
阅读它们以及对它们起作用的功能,以找出你需要的东西。
如果您正在进行内核模式编程,那么这是一个不同的故事。您需要了解自己正在做什么,需要多长时间,以及调用什么背景来了解您需要使用的内容。
答案 1 :(得分:2)
感谢所有回答的人。我们使用gcc原子操作来同步我们所有的线程。原子操作比设置没有同步的值慢大约2倍,但是比锁定互斥锁,更改值,然后解锁互斥锁更快(当你开始让线程进入锁中时,这变得非常慢......)我们只使用pthread_create,attr,cancel和kill。我们使用pthread_kill来通知线程唤醒我们进入睡眠状态。此方法比cond_wait快40倍。所以基本上....如果你有时间浪费,请使用pthreads_mutexes。
答案 2 :(得分:0)
关于问题#8 当没有工作时,是否有比使用条件睡眠线程更好的方法? 是的,我认为最好的方法,而不是使用睡眠 使用的函数如sem_post()和sem_wait of“semaphore.h”
问候
答案 3 :(得分:0)
另外你应该查看nexts书籍
和
答案 4 :(得分:0)
关于futexes的说明 - 它们更具描述性地称为快速用户空间互斥。使用futex时,只有在需要仲裁时才会涉及内核,这样可以提高速度并节省成本。
实现futex可能是extremely tricky(PDF),调试它们会导致疯狂。除非你真的,真的,真的需要速度,否则通常最好使用pthread mutex实现。
同步永远不会完全easy
,但尝试在用户空间中实现自己的同步会使其非常困难。