随笔分类 - 多线程并发
摘要:类似于Mutex,但信号量Semaphores不仅仅是锁和解锁那么简单,更高级的是,可以被锁住最多n次。其中这个n是信号量被产生时指定的n。该值常常被用来代表“可以锁定住一份资源”的线程个数。可以把Mutex比作厕所,当一个人进去后,其他人只能等待;可以把信号量看作是多个Mutex(多个厕所),反正就3个厕所(一个入口,3个坑),无论等待的有多少人,反正想进去必须等到里面出来一个(如果里面满了);在许多系统中,常常使用的是信号量而非Mutex,因为它不一定存在。但是在win32中,我们更多的使用Mutex而不是信号量,Mutex方便嘛,当然用信号量也是可以的。常用的信号量接口:1. 产生信号量
阅读全文
摘要:互斥器的功能是,使多个线程和谐工作。同一时间内,只能有一个线程得到互斥对象,并获得资源操作权限,那么如果同一时间其他线程也想去操作资源,此时就会因为Mutex未处于激发状态,而无奈的等待…这时候,线程就会进入blocking(阻塞)状态,直到Mutex让出来。总结下Mutex的操作步骤,分为以下几个功能:1. 产生一个全局互斥器Mutex(一个Mutex可以看做一个资源,如果要多个资源,则需要创建多个Mutex句柄);2. 锁住互斥器Mutex:获得一个Mutex的拥有权,其他线程只能等待。当需要锁操作时,如果此时锁未处于激活状态,线程就得等待(也就是阻塞状态/sleep)并每隔一段时间尝试着
阅读全文
摘要:线程的重要特性就在于,如何让多个线程之间互相合作,而不是争吵罢工。同步(synchronous):当程序1调用程序2时,程序1停下来不动,直到程序2完成回到程序1来,程序1才继续下去,那么两者的关系就是同步;异步(asynchronous):如果程序1调用程序2时,经自继续自己的下一个动作,那么两者之间的关系就是异步;win32中关于进程和线程的协调工作是由同步机制来完成。临界区域:所谓临界区域就是指用来处理一份被共享的资源的程序代码。必须对临界区域进行保护,一次只能有一个线程获准进入该区域内进行操作。一般代码中可以为需要保护的资源,声明一个CRITICAL_SECTION类型的变量,让其扮演
阅读全文
摘要:为什么需要线程池?目前大多数服务器,包括WEB服务器、Email服务器以及数据库服务器等都具有一个共同点,就是单位时间内必须处理巨大的连接请求,但处理时间却相对较短。传统多线程方案里,我们采用的服务器模型是一旦接受了请求之后,就创建一个新的线程,由该线程来处理任务。任务执行完毕后,线程退出,这就是“即时创建,即时销毁”的策略。尽管与创建进程相比,创建线程的时间已经大大的缩短了,但是如果提交线程的任务是执行时间较短,而且执行次数及其频繁,那么服务器将处于一个不停创建线程,销毁线程的状态。时间划分?我们将传统方案中的线程执行过程划分为3个时间段:T1,T2,T3:T1:线程创建时间;T2:线程执行
阅读全文

浙公网安备 33010602011771号