由於「哪怕是對乙個bool
型變數的賦值和讀取都不保證原子性「,所以在併發環境下,操作可能產生data race的變數需要人為的加以保護。
常用的措施
那麼這兩種措施效率如何呢?
atomic形式
可以得出結論,atomic的形式的效率在臨界區操作不複雜的情況下,要比互斥量的效率高很多。
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using
namespace std;
// atomic variable
//atomicat_var;
// normal global variable
unsigned
long at_var;
// mutex
mutex var_mutex;
// function for each thread's call
void
add_num
(const
int num)
// cout << this_thread::get_id() << endl;
}int
main()
// main thread waits all threads done
threads.
join_all()
; cout <<
"time: "
<<
clock()
- time_start << endl;
cout << at_var << endl;
return0;
}
C 中Mutex的用法
c 中mutex是互斥鎖,位於system.threading 命名空間中。顧名思義,它是乙個互斥的物件,同一時間只有乙個執行緒可以擁有它,該類還可用於程序間同步的同步基元。如果當前有乙個執行緒擁有它,在沒有釋放之前,其它執行緒是沒有權利擁有它的。我們可以把mutex看作洗手間,上廁所的人看作執行緒...
C 中Mutex的用法
c 中mutex是互斥鎖,位於system.threading 命名空間中。顧名思義,它是乙個互斥的物件,同一時間只有乙個執行緒可以擁有它,該類還可用於程序間同步的同步基元。如果當前有乙個執行緒擁有它,在沒有釋放之前,其它執行緒是沒有權利擁有它的。我們可以把mutex看作洗手間,上廁所的人看作執行緒...
C 中Mutex的用法
c 中mutex是互斥鎖,位於system.threading 命名空間中。顧名思義,它是乙個互斥的物件,同一時間只有乙個執行緒可以擁有它,該類還可用於程序間同步的同步基元。如果當前有乙個執行緒擁有它,在沒有釋放之前,其它執行緒是沒有權利擁有它的。我們可以把mutex看作洗手間,上廁所的人看作執行緒...