线程同步问题小记

来源:互联网 发布:数据监控软件 编辑:程序博客网 时间:2024/06/05 19:34
// demo.cpp : 定义控制台应用程序的入口点。
//

#include <thread>
#include <mutex>
#include <iostream>
#include <string>
#include <stdio.h>
#include <vector>
#include <windows.h>
#include <condition_variable>

using namespace std;

CRITICAL_SECTION _critical;

static DWORD WINAPI thread_one(LPVOID)
{
while (true) {
EnterCriticalSection(&_critical);
cout << "enter one" << endl;
LeaveCriticalSection(&_critical);
}
return 0;
}

static DWORD WINAPI thread_two(LPVOID)
{
while (true) {
EnterCriticalSection(&_critical);
cout << "enter two" << endl;
LeaveCriticalSection(&_critical);
}
return 0;
}

int main()
{
InitializeCriticalSection(&_critical);
HANDLE hThread1 = CreateThread(NULL, 0, thread_one, NULL, 0, NULL);
HANDLE hThread2 = CreateThread(NULL, 0, thread_two, NULL, 0, NULL);

WaitForSingleObject(hThread1, INFINITE);
WaitForSingleObject(hThread2, INFINITE);

system("pause");
return 0;

}

上面写了一个很简单的线程同步的代码,什么意思很简单,就是在终端上打印消息,但是在机器上运行的时候,发现总是打印某一个线程的消息?

觉得很奇怪,为什么在运行的时候只是某一个线程获取到锁的资源呢?

后来想了一下程序运行的过程,首先是在while循环里面,线程是在cpu的时间片用完之后,才会竞争锁,所以在一个时间片里,某个线程又重新

进入了该临界区,导致表现出始终都是某一个线程得到了锁,只打印该线程消息;

可以在离开临界区的地方加上sleep,就可以看到交错打印了;






原创粉丝点击