2016wapjpc 发表于 2017-7-25 13:42

【笔记】线程之信号量

我们在解决问题时,希望一个线程跑结束时,同时其它的线程跑起来,这是复杂的线程控制。那就用到了信号量。emaphore可以用于做流量控制,比如数据库连接。假如有一个需求,要读取几万个文件的数据,
因为都是IO密集型任务,我们可以启动几十个线程并发的读取,但是如果读到内存后,还需要存储到数据库中,而数据库的连接数只有10个,
这时我们必须控制只有十个线程同时获取数据库连接保存数据,否则会报错无法获取数据库连接。这个时候,我们就可以使用Semaphore来做流控

CreateSemaphore(
    __in_opt LPSECURITY_ATTRIBUTES lpSemaphoreAttributes,
    __in   LONG lInitialCount,
    __in   LONG lMaximumCount,
    __in_opt LPCWSTR lpName
    );

lpSemaphoreAttributes是信号量的安全属性。
lInitialCount是初始化的信号量。
lMaximumCount是允许信号量增加到最大值。
lpName是信号量的名称。

ReleaseSemaphore(
    __in      HANDLE hSemaphore,
    __in      LONG lReleaseCount,
    __out_opt LPLONG lpPreviousCount
    );

hSemaphore是要增加的信号量句柄。
lReleaseCount是增加的计数。
lpPreviousCount是增加前的数值返回。




Rover榴莲 发表于 2017-7-25 13:59

路过支持,顶一下{:301_986:}

520wangshun 发表于 2017-7-25 14:41

支持楼主{:301_993:}

笨小孩123 发表于 2017-7-27 08:42

路过,进来学习一下

四月天 发表于 2017-11-13 21:58

学习一下
页: [1]
查看完整版本: 【笔记】线程之信号量