C# 并行编程 之 限制资源的并发访问 使用SemaphoreSlim

本文介绍了在C#中如何利用SemaphoreSlim进行并行编程,控制对有限资源的并发访问。SemaphoreSlim提供了一种轻量级的机制,用于协调任务或线程对资源的访问,并支持超时和取消操作。示例展示了10个任务并行访问3个资源的场景,以及如何设置超时等待。同时,文章提到了对于跨进程或AppDomain同步需求,可以使用Semaphore实现。
摘要由CSDN通过智能技术生成

概要

当多个任务或线程并行运行时,难以避免的对某些有限的资源进行并发的访问。可以考虑使用信号量来进行这方面的控制(System.Threading.Semaphore)是表示一个Windows内核的信号量对象。如果预计等待的时间较短,可以考虑使用SemaphoreSlim,它则带来的开销更小。

.NetFrameWork中的信号量通过跟踪进入和离开的任务或线程来协调对资源的访问。信号量需要知道资源的最大数量,当一个任务进入时,资源计数器会被减1,当计数器为0时,如果有任务访问资源,它会被阻塞,直到有任务离开为止。

示例程序: 10个任务并行访问3个资源

using System;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Diagnostics;

namespace Sample5_8_semaphoreslim
{
    class Program
    {
        private static int _TaskNum = 10;
        private static Task[] _Tasks;
        private const int MAX_RESOURCE = 3;
        private const int RUN_LOOP = 10;

        private static SemaphoreSlim m_Semaphore;

        private static void Work1(int TaskID)
        {
            int i = 0;
            var sw = Stopwatch.StartNew();
            var rnd = new Random();

            while (i < RUN_LOOP)
            {
                Thread.Sleep(rnd.Next(200, 500));

                Console.WriteLine("TASK
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值