线程同步问题小记
来源:互联网 发布:数据监控软件 编辑:程序博客网 时间: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;
//
#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,就可以看到交错打印了;
阅读全文
0 0
- 线程同步问题小记
- 碰到的线程问题小记
- 线程/进程同步问题
- 线程同步问题2
- 关于线程同步问题
- 线程的同步问题
- Synchronzied 线程同步问题
- 线程同步问题
- 线程之间同步问题
- 线程同步问题
- 线程同步的问题
- 线程同步问题
- linux线程同步问题
- 线程同步问题
- C# 线程同步问题
- MFC 线程同步问题
- 【转】线程同步问题
- 线程同步问题
- vue,js修饰符
- ARKit 初学和发布会 Demo
- PHP命名空间
- Eclipse中project项目转web项目
- Android清除本地数据缓存代码
- 线程同步问题小记
- 网站解决高并发,实现高可用
- 区块链(一)-Ethereum平台在Mac上的搭建
- Xen虚拟机检测
- avaya交换机TSAPI接口开发Demo 查看源码: cstadefs.h
- Spring计划任务(定时任务)
- Cannot find class [org.springframework.http.converter.json.MappingJacksonHttpMessageConverter]
- 一个程序员的三亚旅游
- linux 使用curl命令发送get和post请求