#include <stdio.h>
#include <numeric>
#include <vector>
#include <string>
#include <map>
#include "iostream"
#include "windows.h"
using namespace std;
CRITICAL_SECTION g_cs;
int tickets=100;
DWORD WINAPI Fun1
(LPVOID lparameter);
DWORD WINAPI Fun2
(LPVOID lparameter);
int main(int argc, char* argv[])
{
HANDLE hthread1=CreateThread(NULL,0,Fun1,NULL,0,NULL);
HANDLE hthread2=CreateThread(NULL,0,Fun2,NULL,0,NULL);
CloseHandle(hthread1);
CloseHandle(hthread2);
//initialize the critical section
InitializeCriticalSection(&g_cs);
Sleep(1000);
// delete the critical section
DeleteCriticalSection(&g_cs);
return 0;
}
DWORD WINAPI Fun1
(LPVOID lparameter)
{
while (true)
{
Sleep(1);
EnterCriticalSection(&g_cs);
if (tickets>0)
{
cout<<"thread 1 is running "<<tickets--<<endl;
}
else
break;
LeaveCriticalSection(&g_cs);
}
return 0;
}
DWORD WINAPI Fun2
(LPVOID lparameter)
{
while (true)
{
Sleep(1);
EnterCriticalSection(&g_cs);
if (tickets>0)
{
cout<<"thread 2 is running "<<tickets--<<endl;
}
else
{
break;
}
LeaveCriticalSection(&g_cs);
}
return 0;
}
分享到:
相关推荐
为了解决这个问题,Windows提供了一系列的线程同步机制,其中包括“线程锁”,也就是我们常说的互斥量(Mutex)。 线程锁,或互斥量,是一种同步对象,它允许同一时间只有一个线程访问被保护的资源。当一个线程获得...
线程互斥是一种同步机制,确保同一时间只有一个线程可以访问共享资源,以避免数据竞争和不一致的状态。在Windows API中,我们可以通过创建和操作Mutex对象来实现这一功能。Mutex有两个主要的API函数:`CreateMutex()...
MFC提供了对Windows API线程功能的封装,使得开发者可以更加方便地创建和管理线程。下面我们将深入探讨MFC下线程的使用及相关知识点。 1. **线程创建**: 在MFC中,创建线程主要有两种方式:通过`CWinThread`派生...
线程在VC++中的实现主要依赖于Windows API,尤其是`CreateThread`函数。这个函数允许开发者创建一个新的线程来执行特定的任务。下面我们将深入探讨如何在VC++中创建和管理线程。 首先,你需要包含必要的头文件,如`...
在多线程编程中,实现一个无死锁的哲学家就餐问题是一个经典的同步问题,用来模拟进程之间的资源分配与互斥访问。...- POSIX与Windows下线程编程的不同API - 操作系统中资源分配与线程调度的基本知识
QQ机器人通常基于事件驱动编程模型,即当接收到特定的消息或事件(如用户上线、下线、发送消息等)时,机器人会触发相应的事件处理器来执行相应操作。这需要开发者熟悉C#中的事件和委托概念。 5. **异步编程**: ...
异步套接字(Asynchronous Socket)是Windows API提供的一种网络编程模型,它允许应用程序在不阻塞主线程的情况下进行网络通信。相比于同步套接字,异步套接字可以极大地提高系统的并发性和响应性,特别是在处理大量...
#### 二、Linux 下线程与 GDI 类解释 - **Linux 下的线程模型**: - Linux 实现的是基于内核轻量级进程(Kernel Thread)的“一对一”线程模型,即每个线程实体都对应一个内核线程。这种模型的优点在于线程间的...