#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;
}
分享到:
相关推荐
VC下线程同步的三种方法(互斥、事件、临界区)简单的代码,让你更容易理解三种同步方式。
为了解决这个问题,Windows提供了一系列的线程同步机制,其中包括“线程锁”,也就是我们常说的互斥量(Mutex)。 线程锁,或互斥量,是一种同步对象,它允许同一时间只有一个线程访问被保护的资源。当一个线程获得...
线程互斥是一种同步机制,确保同一时间只有一个线程可以访问共享资源,以避免数据竞争和不一致的状态。在Windows API中,我们可以通过创建和操作Mutex对象来实现这一功能。Mutex有两个主要的API函数:`CreateMutex()...
windows下threadpool的实现 ( C++ ) 1. Task对于参数的变化参考了loki的typelist的做法,可支持0 - 9个参数的函数对象。 2. task.h使用脚本自动生成(taskGen.py) 3. scheduler.h用于解耦thread_pool和task_thread...
MFC提供了对Windows API线程功能的封装,使得开发者可以更加方便地创建和管理线程。下面我们将深入探讨MFC下线程的使用及相关知识点。 1. **线程创建**: 在MFC中,创建线程主要有两种方式:通过`CWinThread`派生...
总结来说,这份"linux下线程池源代码"是一个实用的并发编程工具,它涉及到了多线程、同步机制和线程池管理等多个核心概念。通过深入研究,开发者不仅可以掌握线程池的使用,还能深化对Linux多线程编程的理解,为实际...
在深入探讨Linux下线程池的C语言实现之前,我们首先需要理解线程池的基本概念以及它在系统设计中的重要性。线程池是一种管理线程的机制,它预先创建一组固定数量的线程,等待任务的到来,从而避免了频繁创建和销毁...
Linux下线程和锁的实验代码 代码演示了在LINUX下创建线程并互斥的访问临界资源
本篇将详细介绍在Linux环境下,如何使用C++进行线程的创建、同步以及销毁等基本操作。 一、线程创建 在C++11及以后的版本中,C++标准库提供了一个名为`std::thread`的类来支持线程操作。创建一个新线程可以使用`std...
线程在VC++中的实现主要依赖于Windows API,尤其是`CreateThread`函数。这个函数允许开发者创建一个新的线程来执行特定的任务。下面我们将深入探讨如何在VC++中创建和管理线程。 首先,你需要包含必要的头文件,如`...
7. **主线程**:主线程继续等待新的连接,直到服务需要停止时,关闭服务器套接字,等待所有工作线程结束。 示例中的"tcplibthreadpool"可能包含了一个使用pthread库和TCP网络编程实现的线程池模型。线程池是一种...
4. **同步机制**:如互斥量(`std::mutex`)、条件变量(`std::condition_variable`)等,用于保证线程间的正确同步,防止数据竞争。 在实际使用时,用户首先需要定义自己的任务类型,这个类型需要有一个无参构造...
这种方法确保了只有一次实例化,并且避免了不必要的同步开销。 ```cpp class Singleton { private: Singleton() {} ~Singleton() {} static std::mutex mtx; static Singleton* instance; public: static ...
singleton是最常见的设计模式,但是要设计好却是不容易,尤其是多线程的时候,需要考虑线程安全的问题.
本文将深入探讨.NET下的多线程开发,包括线程的创建、同步与通信、线程优先级以及线程安全。 一、线程创建 在.NET中,可以使用`System.Threading.Thread`类来创建新的线程。通过实例化Thread类并传递一个委托(如:...
本项目结合两者,实现了一个针对`Dubbo`服务提供者(`Provider`)下线的监控系统,并提供了邮件预警功能,确保系统能够及时发现并处理服务异常情况,减少因服务不可用导致的业务中断。 1. **Zookeeper在Dubbo中的作用...
BMDThread控件是一套相当成熟的线程控件,使用它可以让你快速的创建、管理线程。含Demo
这个“易语言恶搞QQ下线”项目,从标题和描述来看,主要是利用易语言编写的一个程序,其功能可能是发送某种指令或消息,使得目标QQ账号被迫下线,这在编程领域被称为一种恶作剧或黑客行为。 首先,我们要明确,这种...