
基础
倩雯Memory
这个作者很懒,什么都没留下…
展开
-
WinAPI 多线程(一)
包含头文件#include<windows.h>CreateThread创建线程HANDLE CreateThread( LPSECURITY_ATTRIBUTES lpThreadAttributes, ...原创 2018-08-09 13:45:12 · 6801 阅读 · 0 评论 -
多线程本地存储(TLS)
线程局部存储:(1)在不同的平台上有不同的实现。(2)可移植性不太好。(3)好在线程局部存储的实现并不难,最简单的办法就是建立一个全局表,通过当前线程ID去查询相应数据。(4)因为各个线程的ID不同,查到的数据自然也不同了。静态TLS_declspec(thread) DWORD data = 0;声明了_declspec(thread)的变量,会为每个线程...原创 2018-08-28 17:19:28 · 733 阅读 · 0 评论 -
多线程同步互斥量Mutex
Mutex1.C++使用内核对象互斥体(Mutex)来实现线程同步锁。2.当两个或更多线程需要同时访问一个共享资源时,Mutex可以只向一个线程授予对共享资源的独占访问权。3.如果一个线程获取了互斥体,这要获取该互斥体的第二个线程将被挂起,直到第一个线程释放该互斥体。创建互斥体HANDLE CreateMutex( ...原创 2018-08-16 00:21:14 · 296 阅读 · 0 评论 -
多线程同步-线程死锁例子
死锁多个线程因竞争资源而造成的一种僵局(互相等待),若无外力作用,这些进程都将无法向前推进。线程死锁产生的必要条件:(1)互斥条件: 一个资源每次只能被一个进程使用。(2)请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。(3)不可剥夺条件: 进程已获得的资源,在未使用完之前,不能强行剥夺。(4)循环等待条件: 若干进程之间形...原创 2018-08-12 13:01:11 · 221 阅读 · 0 评论 -
模拟多线程火车票售卖demo
模拟多线程火车票售卖demo无锁 无互斥 单纯线程小练习#include<process.h>#include<windows.h>#include<iostream>using namespace std;void ThreadFun1(void * p);void ThreadFun2(void * p);int ticket...原创 2018-08-10 14:30:20 · 514 阅读 · 0 评论 -
WINAPI多线程三
《windows 核心编程》: CreateThread函数是用来创建线程的Windows函数,不过,如果你正在编写C/C++,绝不应该调用CreateThread。相反,应该使用Visual C++运行期库函数_beginthread.注意:1.在CreateThread API创建的线程中使用sprintf,malloc,strcat等涉及CRT存储堆操作的CRT库...原创 2018-08-10 12:45:58 · 495 阅读 · 0 评论 -
WINAPI 多线程二
等待一个内核对象变为已通知状态(single 单个)DWORD WaitForSingleObject(HANDLE hObject,DWORD dwMilliseconds);hObject: 指明一个内核对象的句柄(线程句柄)dwMilliseconds:等待时间 毫秒数备注:1.函数需要传递一个内核(或线程)对象句柄。2.如果该...原创 2018-08-09 17:32:28 · 430 阅读 · 0 评论 -
多线程 - 临界区
多线程的同步和异步异步: 例如赛跑,各跑各的。同步: 例如接力赛,必须接班后才能跑(一个线程必须等到另一个线程的信号等)互斥: 例如独木桥,一次只能过一个(线程)在WIN32中同步机制主要有以下几种:(1)临界区(Critical Section)(2)信号量(Senaphore)(3)互斥量(Mutex)(4)事件(Event)用户模式下的方...原创 2018-08-12 00:38:36 · 1248 阅读 · 0 评论 -
多线程PV操作
PV操作P操作: passeren "通过"V操作:vrijgeven "释放"P操作定义(1)sem减一。(2)若sem>=0,则P操作返回,该线程可以“通过”并继续执行。(3)若sem<0,则该线程被阻塞,进入操作系统的阻塞列队。作定义(1)sem加一(释放)。(2)若sem>0,则V操作返回,该线程继续执行。(3)若sem<=0...原创 2018-08-23 11:22:55 · 2545 阅读 · 0 评论 -
WINAPI多线程消息通讯
多线程之间可以使用WINDOWS消息机智来进行消息通讯。一个线程原本是没有消息队列的,调用任何与消息相关的API会自动初始化线程消息队列相关的数据结构。自定义Windows消息#define MY_MSG (WM_USER+1)注:(1)为了防止用户定义的消息ID与系统的消息ID冲突,Microsoft定义了一个宏 #define WM_USER 0X0400....原创 2018-09-03 11:06:36 · 509 阅读 · 0 评论 -
C++11thread类
C++11新标准中引入五个头文件支持多线程编程,分别:<thread><atomic><mutex><condition_variable><future><thread>头文件(1)该头文件声明了 std::thread类。(2)std::this_thread命名空间也在该头文...原创 2018-09-03 16:01:20 · 487 阅读 · 0 评论 -
this_thread命名空间
C++函数thread查询网址:http://www.cplusplus.com/reference/thread/thread/有不懂的函数可以上去查找!std::thread头文件#include<thread>using namespace std::this_thread;this_thread命名空间thread的所有辅助函数位于std::thi...原创 2018-09-03 17:03:58 · 1097 阅读 · 0 评论 -
atomic 与 atomic_flag类
头文件#include<atomic>using namespace std;template<class T> struct atomic;atomic<T>模板类,生成一个T类型的原子对象,并提供了系列原子操作函数。atomic_flag类atomic_flag 一种简单的原子布尔类型,只支持两种操作,test_and_s...原创 2018-09-04 15:47:36 · 901 阅读 · 0 评论 -
多线程同步信号量
临界区与信号量区别(数量上的区别)临界区(CriticalSection): 一次只允许一个线程访问资源。信号量(Semaphore): 允许N个线程再同一时刻访问同一资源。信号量备注:(1)使用CreateSemaphore()创建信号量时要指出允许的最大资源计数喝当前可用资源计数。(最大资源计数为1时 则与临界区一样)(2)一般将当前可用资源计数设置为最大值,每增加...原创 2018-08-13 17:08:03 · 445 阅读 · 0 评论