惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

H
Help Net Security
宝玉的分享
宝玉的分享
The Cloudflare Blog
Apple Machine Learning Research
Apple Machine Learning Research
V
Visual Studio Blog
Last Week in AI
Last Week in AI
Hugging Face - Blog
Hugging Face - Blog
博客园 - 司徒正美
博客园 - 三生石上(FineUI控件)
A
About on SuperTechFans
MyScale Blog
MyScale Blog
aimingoo的专栏
aimingoo的专栏
Microsoft Security Blog
Microsoft Security Blog
D
Docker
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Recent Announcements
Recent Announcements
大猫的无限游戏
大猫的无限游戏
IT之家
IT之家
P
Proofpoint News Feed
L
LangChain Blog
Blog — PlanetScale
Blog — PlanetScale
The GitHub Blog
The GitHub Blog
博客园 - 【当耐特】
Martin Fowler
Martin Fowler

博客园 - YD

如何查找某一函数的定义 Ruby 线程--生产者、消费者 Ruby的函数指针 Rails2.0学习--真困难 加班赶工,得不偿失——历史给你上六课 7. 创建Subversion服务之补充 Task Manager 1.1 开源软件:(Task Manager)任务管理-找出自己最需要完成的任务 小说阅读器 2.0 6. 创建 Subversion 服务 小说阅读器,有兴趣的同志可以试一下 不规则窗体的制作 播放 wave 文件 简单 Socket 通信 CRC 校验 C# 实现法 5. 多人协作 4. 不要把不必要的文件版本化 3. 从 Repository 中恢复 2. 创建你的 Repository
C# 中信号量的使用
YD · 2007-04-30 · via 博客园 - YD
 

.NET Framework 中信号量的定义在 System.Threading 中,名为 Semaphore 的类。

在操作系统的课程我们应该学到了如果使用信号量来进行多线程或者多进程的同步和互斥。(如果你没学过,不妨找一本书看看。个人认为很有好处。^_^)这时,你就可以用 Semaphore 进行一个小练习了。

我们可以随便使用 Semaphore 来做个 Demo。反正是给你自己看的,不用太好啦。

private Semaphore sem = new Semaphore(0, 1);

public void Begin()

{

    Thread.Sleep(1000);

    Console.WriteLine("Begin()");

    sem.Release();

}

public void End()

{

    sem.WaitOne();

}

public static void Main

{

    Thread t = new Thread(Begin);

    t.Start();

    // Do some work here.

    Console.WriteLine("Main()");

    End();

}

怎么样,简单吧。跟操作系统中所说的信号量没什么两样。当然可以把信号量中的计数器给改一下。方法是在构造函数中指定不同的数值就可以了。

异步调用有了它让人感觉到十分的有把握了。至少我现在是不再怕多线程的程序了。

Semaphore 类似的有一个 ManualResetEvent AutoResetEvent。它们相当于 new Semaphore(0, 1)。我个人感觉是这样的。但是我也没把 ManualResetEvent AutoResetEvent 之间的关系搞清楚。所以建议看此文的人去查一下 MSDN