作者wtchen (没有存在感的人)
看板C_and_CPP
标题[问题] atomic operation 可以完全取代mutex吗
时间Mon Nov 2 17:02:27 2015
开发平台(Platform): (Ex: VC++, GCC, Linux, ...)
Linux kernel 4.1 + Raspberry pi 1 + gcc 4.8
额外使用到的函数库(Library Used): (Ex: OpenGL, ...)
pthread
问题(Question):
最近从板上学到atomic operation
好奇搜寻了一下atomic operation跟pthread mutex的执行速度比较
https://www.arangodb.com/2015/02/comparing-atomic-mutex-rwlocks/
我用RPi跑的结果,mutex需要的时间比g++ atomic多出3-4倍
我的疑问是,既然atomic operation这麽好用,
那以後可以不用mutex直接用atomic operation吗?
(我目前是用gcc bulti-in sync operation)
我自己看mutex的原理好像就是严格跟复杂一点的atomic operation?
1.以我自己的理解,在单核系统atomic operation应该可以替代mutex?
(同一时间只有一个thread能run的情况下,应该比较容易同步吧?)
还是我考虑的太少?
2.使用pthread_cond_wait和pthread_cond_signal 的情况下
一般都是用mutex来配合,如果我改用atomic operation的test and set来作OK吗?
3.在多核的情况下,mutex是唯一解吗?
还是这跟同时间企图读写该critical section 的thread数目有关?
这好像应该是作业系统的问题?
如果有违板规请告知
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 90.41.214.241
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1446454953.A.4B8.html
1F:推 LiloHuang: std::atomic<T> 只能用来保护 integer data types 11/02 18:23
2F:→ LiloHuang: 底下会使用 lock cmpxchg 的等指令来实作 11/02 18:23
3F:→ LiloHuang: atomic 操作可延伸实作出 lockfree container 11/02 18:24
4F:→ LiloHuang: boost::lockfree::queue 就是一个好例子 11/02 18:24
5F:→ LiloHuang: 如果你要保护的是一段程式码,那就是 spin lock 11/02 18:24
6F:→ LiloHuang: 像是 tbb::spin_rw_mutex 是 user space mutex 11/02 18:24
7F:→ LiloHuang: 多核心的系统上,如果要保护的对象是很短的几道指令 11/02 18:25
8F:→ LiloHuang: 使用 spin lock 通常效率会比较好,跑一次性能测试最准 11/02 18:25
9F:→ LiloHuang: 至於用 test-and-set 来实作,有可能会 busy waiting 11/02 18:26
10F:→ LiloHuang: 假设你同步的程式码内容是要做 I/O,还是请用 mutex 11/02 18:26
11F:→ Caesar08: 能用atomic就用,但你会发现atomic能支援的很少 11/02 19:51
12F:→ Caesar08: 这个时候就需要用mutex了 11/02 19:51