摘要: 如果一个变量是全局的,那么所有线程访问的是同一份,某一个线程对其修改会影响其他所有线程。如果我们需要一个变量在每个线程中都能访问,并且值在每个线程中互不影响,这就是TLS。 线程局部存储在不同平台有不同的实现,可移植性不好。线程局部存储不难实现,最简单的办法是建立一个全局表,通过当前线程ID去查询相 阅读全文
posted @ 2020-04-18 23:25 坦坦荡荡 阅读(2319) 评论(0) 推荐(0) 编辑
摘要: PV操作: P操作:passeren,通过,理解为申请资源 V操作:vrijgeven,释放,理解为释放资源 P操作定义如下: 1.sem减1。 2.若sem>=0,则P操作返回,该线程可以”通过“并继续执行。 3.若sem<0,则该线程被阻塞,进入操作系统的阻塞队列。 V操作定义如下: 1.sem 阅读全文
posted @ 2020-04-18 21:33 坦坦荡荡 阅读(2723) 评论(0) 推荐(0) 编辑
摘要: C++使用内核对象Mutex来实现线程同步锁。当两个或者更多线程需要同时访问一个共享资源时,Mutex可以只向一个线程授予对共享资源的独占访问权,如果第一个线程获取了互斥体,则要获取该互斥体的第二个线程将被挂起,知道第一个线程释放该互斥体 相关API函数: 创建互斥量 CreateMutex(); 阅读全文
posted @ 2020-04-18 16:29 坦坦荡荡 阅读(115) 评论(0) 推荐(0) 编辑
摘要: 可以允许N个线程在同一时间访问同一资源 相关API函数: 创建信号量: CreateSemaphore(); HANDLE CreateSemaphore( LPSECURITY_ATTRIBUTES lpSemaphoreAttributes, // 安全属性,NULL为默认 LONG lInit 阅读全文
posted @ 2020-04-18 15:19 坦坦荡荡 阅读(253) 评论(0) 推荐(0) 编辑
摘要: 死锁是指多个线程因为竞争资源而造成的一种僵局(互相等待)若无外力作用,这些进程都将无法向前推进 死锁产生的必要条件: 1).互斥条件:一个资源每次只能被一个进程使用 2).请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放 3).不可剥夺条件:进程已获得的资源,在未使用完之前,不能强 阅读全文
posted @ 2020-04-18 15:06 坦坦荡荡 阅读(109) 评论(0) 推荐(0) 编辑