多线程互斥锁

多线程互斥锁的使用条件是:有多个线程访问全局的临界资源(变量)。

#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

posted on 2020-01-14 09:59  缘随风烬  阅读(596)  评论(0编辑  收藏  举报