c# Interlocked怎么操作bool变量

vbzpsfOz7 2011-08-22 08:58:53
Interlocked 是线程安全的原子操作

该怎么用这个类下面的方法 将bool型的变量赋值为 true ?

...全文
1405 9 打赏 收藏 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
全栈深入 2011-08-22
  • 打赏
  • 举报
回复
也就是System.Threading.Interlocked.Exchange(ref Object,Object)方法来完成。
全栈深入 2011-08-22
  • 打赏
  • 举报
回复
经过自己的试验,发现上面我的方法Interlocked.Exchange<T>(T, T)不对,因为泛型类T必须是引用类型,而bool是struct,为值类型,非引用类型!,见定义:
public static T Exchange<T>(ref T location1,T value) where T : class



所以只能用下面的方法:

static void SetValue()
{
object status = true;
System.Threading.Interlocked.Exchange(ref status, (object)true);
}

vbzpsfOz7 2011-08-22
  • 打赏
  • 举报
回复
5楼的代码不对.提示 必须是引用类型才能作为参数.

Interlocked.Exchange<bool>(boolVar, true);

Interlocked.Exchange<bool>(ref boolVar, true)//

上面两种都不行
dulei123321 2011-08-22
  • 打赏
  • 举报
回复
顶楼上 学习了
全栈深入 2011-08-22
  • 打赏
  • 举报
回复
Interlocked.Exchange<bool>(bool, true)

写错了,应该是
Interlocked.Exchange<bool>(boolVar, true)//boolVar你要改变的变量名
isjoe 2011-08-22
  • 打赏
  • 举报
回复
[Quote=引用楼主 vbzpsfoz7 的回复:]
Interlocked 是线程安全的原子操作

该怎么用这个类下面的方法 将bool型的变量赋值为 true ?
[/Quote]

你自己转换一下吧,0代表false,非0代表true
全栈深入 2011-08-22
  • 打赏
  • 举报
回复
Exchange<T>(T, T)


//A simple method that denies reentrancy.
static void UseResource()
{
//0 indicates that the method is not in use.
if(false == Interlocked.Exchange<bool>(bool, true)) //用这个可以完成你要的赋值操作。
{
Console.WriteLine("{0} acquired the lock", Thread.CurrentThread.Name);

//Code to access a resource that is not thread safe would go here.

//Simulate some work
Thread.Sleep(500);

Console.WriteLine("{0} exiting lock", Thread.CurrentThread.Name);

//Release the lock
}
}
LMAOhuaNL 2011-08-22
  • 打赏
  • 举报
回复

111,128

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧