版权声明:私藏源代码是违反人性的罪恶行为!博客转载无需告知,学无止境。 https://blog.csdn.net/qq_41822235/article/details/85344711
一个实例典型C/S模式___线程池实现
目录
一、实现进程互斥
1.1 作用
为使多个进程能互斥地访问某临界资源,只需为该资源设置一互斥信号量mutex,并设其初值为1(信号量初值的设置是有讲究的,和第二节做对比吧)。然后将各进程访问该资源的临界区Critical Section置于wait(mutex)和signal(mutex)操作之间即可。前者简称P操作,后者简称V操作。一个平常不过的概念源远流长足见Dijkstra的伟大。
1.2 模型给出
在利用信号量机制实现进程互斥应该注意,wait(mutex)和signal(mutex)必须成对地出现。缺少wait(mutex)将会导致系统混乱,不能保证对临界资源的互斥访问;而缺少signal(mutex)将会使临界资源永远不会被释放,从而使因等待该资源而阻塞的进程不能被唤醒。
二、实现前趋关系
2.1 模型给出
在前趋图(Precedence Graph)中,每个结点可用来表示一个进程或程序段,乃至一条语句,结点间的有向边则表示两个结点之间存在偏序(Partial Order)或者前趋关系(Precedence Graph)。
那如何利用信号量实现图2 表现的前驱关系呢?具体到每个箭头的两端实际都是可用信号量实现的。举一反三,若要实现需要7个初值为0的信号量,如下所示: