linux线程同步

时间:2010-04-07 18:25:08

标签: linux performance synchronization multithreading locking

5 个答案:

答案 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书籍

  • Pthreads编程:POSIX 更好的多处理标准

  • 使用POSIX(R)线程编程

答案 4 :(得分:0)

关于futexes的说明 - 它们更具描述性地称为快速用户空间互斥。使用futex时,只有在需要仲裁时才会涉及内核,这样可以提高速度并节省成本。

实现futex可能是extremely tricky(PDF),调试它们会导致疯狂。除非你真的,真的,真的需要速度,否则通常最好使用pthread mutex实现。

同步永远不会完全easy,但尝试在用户空间中实现自己的同步会使其非常困​​难。