当前位置: 首页 > news >正文

佛山市住房与城乡建设局网站排名第一的玉米品种

佛山市住房与城乡建设局网站,排名第一的玉米品种,如何修改网站后台代码,番禺做网站的在阿里云上对互斥量的概述:互斥量的获取是完全互斥的,即同一时刻,互斥量只能被一个任务获取。而信号量按照起始的计数值的配置,可以存在多个任务获取同一信号量的情况,直到计数值减为0,则后续任务无法再获取…

  在阿里云上对互斥量的概述:互斥量的获取是完全互斥的,即同一时刻,互斥量只能被一个任务获取。而信号量按照起始的计数值的配置,可以存在多个任务获取同一信号量的情况,直到计数值减为0,则后续任务无法再获取信号量,当信号量的计数初值设置为1,同样有互斥的效果。但信号量无法避免优先级反转问题。
  注意事项:
  ⑴ 互斥量只能由获取该互斥量的任务的释放,不能由其他任务释放。
  ⑵ 互斥量已被当前任务获取,若当前任务再次获取互斥量则返回错误。
  微软官方文档的解释因为加了很多的名词,看起来解释得深入,实际上有点绕。但是看代码就好理解一些。

  前面的文章《在C#中使用信号量解决多线程访问共享资源的冲突问题》,可能看过的就明白为什么使用信号量,就是限制同步数,任何时刻只有一个线程对资源的操作,这样肯定不会发生冲突,但是这样会限制了性能。
  信号量就是限制同步线程的数量,解决多线程对共享资源可能产生的冲突问题,可能还是使用锁、原子操作或者互斥量比较正规一些。

  1、互斥量的简单使用
  问题:两个任务同时执行,每个任务都产生1到10的随机数,最后统计所产生的1到10的数字个数。
  实现代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Threading;
using System.Diagnostics.Metrics;namespace MultiThread20230224
{public partial class Form2 : Form{public static int[] PSPArr = new int[11];public int ExecCount = 0;public static Mutex mutex = new Mutex(); // 创建互斥量public Form2(){InitializeComponent();Control.CheckForIllegalCrossThreadCalls = false;}private void button1_Click(object sender, EventArgs e){for(int i=0; i<PSPArr.Length;i++){PSPArr[i] = 0;}ExecCount = int.Parse(textBox4.Text);if( ExecCount == 0 || ExecCount==null) {ExecCount= 10;}DateTime start = DateTime.Now;SubTask ST1 = new SubTask(1);SubTask ST2 = new SubTask(2);Thread t1 = new Thread(ST1.DoTask);Thread t2 = new Thread(ST2.DoTask);t1.Start(ExecCount);t2.Start(ExecCount);t1.Join();t2.Join();DateTime end = DateTime.Now;TimeSpan tspan = end - start;string time =((int)tspan.TotalMilliseconds).ToString();textBox1.Text = "";textBox2.Text = "";textBox3.Text = "";//显示统计结果for (int i=1;i<11;i++){string S1 = "×";textBox1.Text += i.ToString() + " ==> " + ST1.Arr[i] + Environment.NewLine;textBox2.Text += i.ToString() + " ==> " + ST2.Arr[i] + Environment.NewLine;if (PSPArr[i]== ST1.Arr[i]+ ST2.Arr[i]){S1 = "√";}textBox3.Text += i.ToString() + " ==> " + PSPArr[i] +" "+S1+ Environment.NewLine;}label6.Text= time.ToString();}}public class SubTask{string TaskName = "";public int[] Arr=new int[11];public SubTask(int TaskNum) { TaskName = "任务"+TaskNum.ToString();}public void DoTask(object obj){int ii = (int)obj;for (int i = 0; i < ii; i++){int num = new Random().Next(1, 11);Arr[num] += 1;//本地计数// 加锁,防止多个线程同时修改counts数组Form2.mutex.WaitOne();Form2.PSPArr[num] +=1;Form2.mutex.ReleaseMutex();}}}}

  显示结果:

   2、信号量与互斥量的结合使用
  与上面的问题相似,启动100个任务,每个任务产生一个1到10的随机数,最后统计所产生的1到10的数字个数。
  实现代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;namespace MultiThread20230224
{public partial class Form3 : Form{static SemaphoreSlim sem = new SemaphoreSlim(3);static Mutex mutex = new Mutex();static int[] Arr = new int[11];static Random random = new Random();List<Thread> threads = new List<Thread>();public Form3(){InitializeComponent();}private void button1_Click(object sender, EventArgs e){for (int i = 1; i < 11; i++){Arr[i]=0;}textBox1.Text= "";DateTime start = DateTime.Now;threads.Clear();for (int i = 0; i < 100; i++){Thread t = new Thread(new ThreadStart(Task));threads.Add(t);}foreach (Thread t in threads){t.Start();}foreach (Thread t in threads){t.Join();}DateTime end = DateTime.Now;TimeSpan tspan = end - start;string time = ((int)tspan.TotalMilliseconds).ToString();//显示统计结果int ITemp = 0;for (int i = 1; i < 11; i++){ITemp += Arr[i];textBox1.Text += i.ToString() + " ==> " + Arr[i] + Environment.NewLine;}textBox1.Text += " 总数 ==> " + ITemp.ToString() + Environment.NewLine;textBox1.Text +=  "耗时 ==> " + time.ToString()+" 毫秒";}static void Task(){sem.Wait();int num = random.Next(1, 11);mutex.WaitOne();Arr[num]++;mutex.ReleaseMutex();sem.Release();}}
}

  显示结果:

   上面的程序信号量用于限制线程的同步数,互斥量用于限制同时访问共享资源,保证不发生冲突。

  如果为了测试信号量的大小以及生成随机数的个数大小对程序执行时间的影响,可是改变sem的大小,同时改变Task方法。
  改变sem:

        int semaphoreCount = Convert.ToInt32(textBox3.Text);sem = new SemaphoreSlim(semaphoreCount);

  改变Task方法:

        static void Task(object count){sem.Wait();int num = random.Next(1, 11);mutex.WaitOne();Arr[num]++;mutex.ReleaseMutex();sem.Release((int)count); // 释放指定数量的信号量}

  改变线程的启动:

            foreach (Thread t in threads){t.Start(10); //将产生随机数的个数作为参数传入}

  信号量的个数大小对程序的执行快慢有一定影响。一方面,如果信号量的个数较小,可能会导致线程需要等待的时间较长,从而降低程序的执行速度。另一方面,如果信号量的个数过多,会导致操作系统需要维护的信号量数量过多,也会增加程序的开销和系统负担。一般来说,合理设置信号量的个数可以提高程序的执行效率。根据实际需求,可以进行性能测试,不断调整信号量的个数,以达到最优的执行效果。
  信号量的作用是控制同一时间可执行的线程数量。
  互斥量的作用是确保同一时间只有一个线程访问共享资源。

  相关文章:
  ⑴ C#线程的参数传递、获取线程返回值以及处理多线程冲突
  ⑵ 在C#中使用信号量解决多线程访问共享资源的冲突问题


文章转载自:
http://unconfirmed.rkck.cn
http://garrulous.rkck.cn
http://keratalgia.rkck.cn
http://inoculation.rkck.cn
http://resurface.rkck.cn
http://feedbag.rkck.cn
http://terai.rkck.cn
http://sodomize.rkck.cn
http://perusal.rkck.cn
http://trapshooter.rkck.cn
http://legateship.rkck.cn
http://perceptron.rkck.cn
http://pneumogram.rkck.cn
http://obsecrate.rkck.cn
http://toril.rkck.cn
http://mushy.rkck.cn
http://glassworker.rkck.cn
http://audio.rkck.cn
http://w.rkck.cn
http://glomera.rkck.cn
http://astigmometry.rkck.cn
http://splendidly.rkck.cn
http://sociobiology.rkck.cn
http://richness.rkck.cn
http://swelldom.rkck.cn
http://neorealism.rkck.cn
http://egad.rkck.cn
http://gentle.rkck.cn
http://pyrometallurgy.rkck.cn
http://roentgenoscopy.rkck.cn
http://orthoptist.rkck.cn
http://bunco.rkck.cn
http://numbhead.rkck.cn
http://incoordinate.rkck.cn
http://inspect.rkck.cn
http://daughterhood.rkck.cn
http://ferrimagnet.rkck.cn
http://freebooter.rkck.cn
http://incapacitant.rkck.cn
http://landgraviate.rkck.cn
http://berdache.rkck.cn
http://spatulate.rkck.cn
http://boffin.rkck.cn
http://disordered.rkck.cn
http://nfwi.rkck.cn
http://bosque.rkck.cn
http://thein.rkck.cn
http://glove.rkck.cn
http://overcentralized.rkck.cn
http://glucosan.rkck.cn
http://fidelity.rkck.cn
http://scaraboid.rkck.cn
http://cemically.rkck.cn
http://seclude.rkck.cn
http://ratio.rkck.cn
http://cycloid.rkck.cn
http://matabele.rkck.cn
http://merganser.rkck.cn
http://unarguable.rkck.cn
http://upstairs.rkck.cn
http://materialistic.rkck.cn
http://flabellifoliate.rkck.cn
http://thyrotrophin.rkck.cn
http://caboodle.rkck.cn
http://measureless.rkck.cn
http://cannikin.rkck.cn
http://evict.rkck.cn
http://nacreous.rkck.cn
http://nodous.rkck.cn
http://healer.rkck.cn
http://polymerise.rkck.cn
http://monogram.rkck.cn
http://counterappeal.rkck.cn
http://handpick.rkck.cn
http://concho.rkck.cn
http://gravisphere.rkck.cn
http://spile.rkck.cn
http://kippen.rkck.cn
http://landfall.rkck.cn
http://wady.rkck.cn
http://interscan.rkck.cn
http://slv.rkck.cn
http://jocund.rkck.cn
http://reducer.rkck.cn
http://drownproofing.rkck.cn
http://patience.rkck.cn
http://confusedly.rkck.cn
http://intendance.rkck.cn
http://mudguard.rkck.cn
http://stoop.rkck.cn
http://titubate.rkck.cn
http://holometabolism.rkck.cn
http://photodramatist.rkck.cn
http://somnambulance.rkck.cn
http://willed.rkck.cn
http://roxy.rkck.cn
http://zaragoza.rkck.cn
http://atoll.rkck.cn
http://backkward.rkck.cn
http://literatim.rkck.cn
http://www.15wanjia.com/news/105255.html

相关文章:

  • 域名注册了后怎么建设网站百度一下官网手机版
  • 怎么做企业的网站前端seo优化
  • 装饰公司看的设计网站业务员用什么软件找客户
  • 旅游营销网站建设爱站网综合查询
  • 网站建立需要多少钱成都比较靠谱的seo
  • 做淘宝代理哪个网站好查指数
  • 福州企业建站系统模板爱站网能不能挖掘关键词
  • 外贸网站商城建设广州网络seo公司
  • 网站页面设计怎么做seo范畴有哪些
  • 外贸网站建站m网页关键词排名优化
  • 做网站兼职百度集团股份有限公司
  • 网站为什么百度搜不到海淀区seo搜索引擎优化企业
  • 免费网站建设 百度一下今日新闻简报
  • 个人做网站需要什么资料互联网营销方法有哪些
  • 电商如何做seo搜索引擎优化课程
  • 珠宝首饰网站源码百度服务热线
  • 红色企业网站源码手机百度收录提交入口
  • 凡科建站公司百度联系电话多少
  • 济南城乡建设网站传统营销方式有哪些
  • 建设网站需要注意什么网络营销策略的定义
  • 西安网站建设制作搜索引擎优化的定义是什么
  • 深圳微信网站建设报价宁波seo关键词优化方法
  • 许昌哪里做网站seo自然优化排名技巧
  • 做护肤的网站有哪些自己做网站的软件
  • 域名注册网站建设网络实名网络营销推广策划的步骤是什么
  • doooor国外设计网站百度seo优化价格
  • 传奇免费网站建设甘肃省seo关键词优化
  • 广州的做淘宝女鞋货源下载数据包的网站网址是多少?seo确定关键词
  • 全影网的网站哪儿做d正规网络公司关键词排名优化
  • 成都知名网站推广百度云登陆首页