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

网站绑定两个域名怎么做跳转域名ip地址查询

网站绑定两个域名怎么做跳转,域名ip地址查询,易营宝mip网站建设,桂林临桂区最新消息线程同步的手段很多 lock 是通过内存索引块 0 1 切换 进行互斥的实现 互斥量 信号量 事件消息 其实意思就是 一个 标记量 通过这个标记 来进行类似的互斥手段 具体方式的分析 代码在后 1.互斥量 Mutex 作用 非常类似lock 一个Mutex 名称来代替 lock的引用对象 2.信号量 Semaph…

线程同步的手段很多
lock 是通过内存索引块 0 1 切换 进行互斥的实现
互斥量 信号量 事件消息 其实意思就是 一个 标记量
通过这个标记 来进行类似的互斥手段

具体方式的分析 代码在后
1.互斥量 Mutex 作用 非常类似lock 一个Mutex 名称来代替 lock的引用对象
2.信号量 SemaphoreSlim 作用 同时访问同一个资源的线程数量 跨程序同步的场景下可以使用 混合模式
3.事件标识 AutoResetEvent 作用 类似lock 通过 waitone 阻塞与 set 通行 但只有一个线程可用标识
4.事件标识 ManualResetEventSlim 通过 set 通行 reset 设置阻塞 wait 阻塞 多个线程可用标识
5.事件标识 CountdownEvent 作用 限制指定次数信号量 达到后通行
6. SpinWait 自选锁 混合模式
7. ReaderWriterLockSlim 读写锁

互斥量 Mutex ReleaseMutex 测试先在项目路径cmd用命令行dotnet run 执行 然后在看断点

class Program
{static void Main(string[] args){const string MutexName = "testMutex";using (var m = new Mutex(false, MutexName)){if (!m.WaitOne(TimeSpan.FromSeconds(3), false)){Console.WriteLine("未捕获到互斥量");}else{Console.WriteLine("执行逻辑");Console.ReadLine();//释放互斥量m.ReleaseMutex();}}}
}

在这里插入图片描述

信号量 SemaphoreSlim 设置数量为4 循环中执行3次 主线程执行一次 发现主线程没执行
必须释放信号量 才可以 满足 最大执行数保存在4以内

class Program
{static void Main(string[] args){for (int i = 1; i <= 3; i++){string threadName = "Thread " + i;var t = new Thread(() => SemaphoreS(threadName, 2));t.Start();}var t1 = new Thread(() => SemaphoreS("4", 2));t1.Start();}static SemaphoreSlim _semaphore = new SemaphoreSlim(3);static void SemaphoreS(string name, int seconds){Console.WriteLine("{0} 开始", name);_semaphore.Wait();Console.WriteLine("{0} 执行", name);Thread.Sleep(TimeSpan.FromSeconds(seconds));Console.WriteLine("{0} 完成", name);//释放信号量//_semaphore.Release();}
}

在这里插入图片描述

AutoResetEvent 设置俩个 事件标识 通过set 畅通信号 waitone 阻塞信号
于是可以看到 子线程1》主线程2》子线程2 =子线程3》主线程3

class Program
{static void Main(string[] args){var t = new Thread(() => Process());t.Start();Console.WriteLine("主线程过程1");_workerEvent.WaitOne();Console.WriteLine("主线程过程2");_mainEvent.Set();_workerEvent.WaitOne();Console.WriteLine("主线程过程3");Console.ReadKey();}private static AutoResetEvent _workerEvent = new AutoResetEvent(false);private static AutoResetEvent _mainEvent = new AutoResetEvent(false);static void Process(){Console.WriteLine("子线程过程1");_workerEvent.Set();_mainEvent.WaitOne();Console.WriteLine("子线程过程2");Console.WriteLine("子线程过程3");_workerEvent.Set();}
}

在这里插入图片描述
但是如果使用多个子线程发现 其实只有1个子线程能够识别这个 标识
在这里插入图片描述

ManualResetEventSlim 为了解决上诉 1个线程使用标识的问题 俩个线程测试通过 主线程set通行
子线程中reset阻塞 并且wait等待 ManualResetEvent 用waitone

class Program
{static void Main(string[] args){var t = new Thread(() => Process(1));t.Start();var t1 = new Thread(() => Process(2));t1.Start();Console.WriteLine("主线程过程1");_mainEvent.Set();Thread.Sleep(3);Console.WriteLine("主线程过程2");_mainEvent.Set();Thread.Sleep(3);Console.WriteLine("主线程过程3"); _mainEvent.Set();Console.ReadKey();}private static ManualResetEvent _mainEvent = new ManualResetEvent(false);static void Process(int i){_mainEvent.WaitOne();Console.WriteLine(i+"子线程过程1");_mainEvent.Reset();_mainEvent.WaitOne();Console.WriteLine(i + "子线程过程2");_mainEvent.Reset();_mainEvent.WaitOne();Console.WriteLine(i + "子线程过程3");}
}
class Program
{static void Main(string[] args){var t = new Thread(() => Process(1));t.Start();var t1 = new Thread(() => Process(2));t1.Start();Console.WriteLine("主线程过程1");_mainEvent.Set();Thread.Sleep(3);Console.WriteLine("主线程过程2");_mainEvent.Set();Thread.Sleep(3);Console.WriteLine("主线程过程3"); _mainEvent.Set();Console.ReadKey();}private static ManualResetEventSlim _mainEvent = new ManualResetEventSlim(false);static void Process(int i){_mainEvent.Wait();Console.WriteLine(i+"子线程过程1");_mainEvent.Reset();_mainEvent.Wait();Console.WriteLine(i + "子线程过程2");_mainEvent.Reset();_mainEvent.Wait();Console.WriteLine(i + "子线程过程3");}
}

在这里插入图片描述
CountdownEvent 达到指定次数 继续通行 否则 wait阻塞 signal记录次数 Dispose 释放

class Program
{static void Main(string[] args){Console.WriteLine("俩个线程");var t1 = new Thread(() => StartThread("线程1", 4));var t2 = new Thread(() => StartThread("线程2", 8));t1.Start();t2.Start();_countdown.Wait();Console.WriteLine("结束");_countdown.Dispose();Console.ReadKey();}static CountdownEvent _countdown = new CountdownEvent(2);//指定次数 如果设置3 那么 结束不会打印一直会阻塞static void StartThread(string message, int seconds){Thread.Sleep(TimeSpan.FromSeconds(seconds));Console.WriteLine(message);_countdown.Signal();//记录次数执行一次就会+1 如果不设置 那么不达到指定次数 也会一直 wait阻塞}
}

在这里插入图片描述SpinWait 自选锁 混合模式 用户模式 短时间循环等待 然后行不通即切换上下文 内核模式阻塞

class Program
{static void Main(string[] args){var t1 = new Thread(UserModeWait);//用户模式var t2 = new Thread(HybridSpinWait);//混合模式Console.WriteLine("用户模式");t1.Start();Thread.Sleep(1);_isOKUser = true;Console.WriteLine("混合模式");t2.Start();Thread.Sleep(5);_isOKSpin = true;Console.ReadKey();}static volatile bool _isOKUser = false; //volatile 修饰多个线程访问 最新值 存在内存中static volatile bool _isOKSpin = false;static void UserModeWait(){while (!_isOKUser){Console.Write("-不ok-");}Console.WriteLine();Console.WriteLine("用户模式OK");}static void HybridSpinWait(){var w = new SpinWait(); //先用户模式占用cpu资源等待循环9次 若还没等到执行通行 那么切换上下文 内核模式 阻塞 while (!_isOKSpin){w.SpinOnce();Console.WriteLine("混合模式上下文切换"+w.NextSpinWillYield);}Console.WriteLine("混合模式OK");}
}

在这里插入图片描述

ReaderWriterLockSlim 读写锁 就是 读可共享锁 写是互斥锁 当断点设置在写锁的过程中 可以看见 读取的时候被阻塞了

class Program
{static void Main(string[] args){new Thread(Read) { IsBackground = true }.Start();new Thread(Read) { IsBackground = true }.Start();new Thread(Read) { IsBackground = true }.Start();new Thread(() => Write("Thread 1")) { IsBackground = true }.Start();new Thread(() => Write("Thread 2")) { IsBackground = true }.Start();Thread.Sleep(TimeSpan.FromSeconds(10));Console.ReadKey();}static ReaderWriterLockSlim _rw = new ReaderWriterLockSlim();static Dictionary<int, int> _items = new Dictionary<int, int>();static void Read(){Console.WriteLine("读取");while (true){try{_rw.EnterReadLock();foreach (var key in _items.Keys){Console.WriteLine(Thread.CurrentThread.ManagedThreadId+ "读取字典"+key);Thread.Sleep(TimeSpan.FromSeconds(0.1));}}finally{_rw.ExitReadLock();}}}static void Write(string threadName){while (true){try{int newKey = new Random().Next(5);_rw.EnterUpgradeableReadLock();if (!_items.ContainsKey(newKey)){try{_rw.EnterWriteLock();_items[newKey] = 1;Console.WriteLine("{0}添加字典 {1}", threadName, newKey);}finally{_rw.ExitWriteLock();}}Thread.Sleep(TimeSpan.FromSeconds(0.1));}finally{_rw.ExitUpgradeableReadLock();}}}
}

在这里插入图片描述

http://www.yayakq.cn/news/515327/

相关文章:

  • 刚做的网站上线后收不到了良精企业网站系统
  • 合作制作网站广告设计与制作网站
  • 记事本做网站怎么改字体颜色书店网站建设定位及目标
  • 找国外公司做网站软件工程项目案例
  • 康巴什网站建设怎么申请一个网站
  • 上海建设银行网站查询余额深圳龙华区邮政编码
  • 郑州建设企业网站公司什么是电子商务专业?
  • 电商网站怎么建设中信银行网站怎么做的怎么烂
  • 比较知名的设计网站有哪些自己网站可以加标志吗
  • 企业网站网址编程python适合多大孩子学
  • 西部数码网站管理助手4.0镇江网站建设哪家好
  • 无锡微信网站定制北京又不让出京了
  • 蓬莱做网站哪家好天猫店铺入驻流程
  • 北京谁会做网站开发传媒公司主要做什么
  • 深圳专业做网站服务网络科技有限公司名字
  • 网站建设到维护全国建设造价信息网站
  • 牡丹江城乡建设局网站玉林城乡住房建设厅网站
  • 安阳住房与城乡建设局官方网站python语言基础
  • 网站制作价格行情苏州企业网站设计制作
  • 表白网站wordpress to phonegap
  • 成都网站建设龙兵网络网站建设竞品分析
  • 网站开发 石家庄 天堂中文在线官网
  • ppt成品免费下载的网站建设网站ppt
  • 网站域名申请好了怎么建设网站杭州城乡和住房建设局网站
  • 网站开发甲方需求文档十大免费ppt网站软件
  • 南京最好的网站设计公司做智能网站平台
  • 网站设计软件网络智能营销推广平台
  • 网站建设知识平台wordpress地址修改
  • 广州市城乡和建设局网站首页局域网
  • 京东网站建设的目标买空间送网站模板