博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
通过锁字符串达到控制并发的效果C#
阅读量:5785 次
发布时间:2019-06-18

本文共 1890 字,大约阅读时间需要 6 分钟。

lock锁的是地址

而.net有内部机制使得相同的字符串内存地址是相同的(new string)除外

下面上实验代码

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading;using System.Threading.Tasks; namespace ConsoleApp5{    class Program    {        static void Main(string[] args)        {            List
keyList = new List
{ "key1","key2", "key1", "key1", "key1", "key1", }; keyList.ForEach(u => { ThreadPool.QueueUserWorkItem(s => { test.lockTestByString(u); }); }); Console.Read(); } } public class test { public static void lockTestByString(string key) { lock (key) { Console.WriteLine("上锁2s key="+key); Thread.Sleep(2000); Console.WriteLine("解锁"); } } }}

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading;using System.Threading.Tasks; namespace ConsoleApp5{    class Program    {        static void Main(string[] args)        {            List
keyList = new List
{
new string('k',1), new string('k', 1), new string('k', 1), new string('k', 1) }; keyList.ForEach(u => { ThreadPool.QueueUserWorkItem(s => { test.lockTestByString(u); }); }); Console.Read(); } } public class test { public static void lockTestByString(string key) { lock (key) { Console.WriteLine("上锁2s key="+key); Thread.Sleep(2000); Console.WriteLine("解锁"); } } }}

通过new字符串得出的运行结果

 

 转自:https://www.cnblogs.com/ProDoctor/p/7619847.html

 

你可能感兴趣的文章
Resignation letter
查看>>
Jmeter常用函数
查看>>
LR监控Windows资源
查看>>
linux 权限
查看>>
01-计算机硬件
查看>>
转载:写更少的代码
查看>>
en_o out1
查看>>
IE8支持HTML5的占位符placeholder
查看>>
[.NET] GC垃圾回收机制
查看>>
博弈论入门 Bash 、Nim 、Wythoff's Game结论及c++代码实现
查看>>
JAVA Double去掉科学计数"E"
查看>>
读ecshop笔记(二)——RBAC
查看>>
百度智能语音引用1
查看>>
zend
查看>>
C语言基础--自加自减
查看>>
[转]C#调用C++写的Dll时的运行时错误解决
查看>>
Linux内存管理(一)
查看>>
Unix NetWork Programming——环境搭建(解决unp.h等源码编译问题) (转)
查看>>
ASP.NET与JavaScript轻松实现输入信息验证
查看>>
ARM中的总线
查看>>