多线程互斥锁
多线程互斥锁的使用条件是:有多个线程访问全局的临界资源(变量)。
#include <iostream> #include <thread> #include <mutex> using namespace std; std::mutex mt; int a[5] = { 1,2,3,4,5 }; void say() { //std::unique_lock<std::mutex> lck(mt); //加锁 std::cout <<"线程ID ="<< std::this_thread::get_id() << endl; for (int i = 0; i<5; i++) { std::cout << "i=" << a[i] << " "; } std::cout << a << std::endl; //lck.unlock(); //释放锁 } int main() { std::thread th[5]; for (int i = 0; i<5; i++) { th[i] = std::thread(say); } for (int i = 0; i<5; i++) { th[i].join(); } getchar(); return 0; }
运行结果:(未加锁)
线程ID =25240线程ID =
线程ID =22460线程ID =1991214216
线程ID =19416i=
1
i=i=1 i=i=2i=1 2i= i=31 i=i=2 i=3i=23 i=i=144 i= 3i=i=4 5 i= i=i=5 2 i= i=4300BB100000BB10005 i=
5
00BB1000
i=4 i=500BB1000
00BB1000
运行结果:(加锁)
线程ID =18968
i=1 i=2 i=3 i=4 i=5 00C78000
线程ID =22312
i=1 i=2 i=3 i=4 i=5 00C78000
线程ID =9708
i=1 i=2 i=3 i=4 i=5 00C78000
线程ID =6976
i=1 i=2 i=3 i=4 i=5 00C78000
线程ID =15752
i=1 i=2 i=3 i=4 i=5 00C78000