不知道这是一个风格的问题,或者有一个硬性的规则… 如果我想保持公共方法接口尽可能const,但使对象线程安全,我应该使用可变互斥锁? 一般来说,这是一种很好的风格,还是应该使用非const方法的接口呢? 请certificate你的看法。
首先,我使用pthread库来编写multithreadingC程序。 线程总是挂在等待的互斥体上。 当我使用strace实用程序来查找一个线程处于FUTEX_WAIT状态时,我想知道哪个线程在那个时候持有该互斥体。 但我不知道该怎么做。 有没有公用事业可以做到这一点? 有人告诉我,Java虚拟机支持这个,所以我想知道Linux是否支持这个function。
在低级语言(C,C ++或其他)中,我有两种互斥方式(比如pthread给我或者本地系统库提供的任何东西)或者一个对象的select。 locking互斥锁效率如何? 也就是说,有多less汇编程序指令可能会有多less时间(在互斥锁被解锁的情况下)? 互斥体花费多less钱? 真的有很多互斥体是一个问题吗? 或者我可以在我的代码中插入尽可能多的互斥variables,因为我有intvariables,这并不重要吗? (我不确定不同的硬件之间有多大的差别,如果有的话,我也想知道它们,但是大多数时候我对硬件很感兴趣。 重点是,通过使用许多互斥体,每个互斥体只覆盖对象的一部分,而不是整个对象的单个互斥体,我可以安全地阻止许多块。 我想知道我应该走多远。 也就是说,我应该尽可能地尽可能地保护任何可能的块,不pipe这个复杂多less,这个互斥量是多less?
有人可以解释之间的区别: 锁(someobject){} 使用互斥体 使用信号量 使用监视器 使用其他.Net同步类 我只是无法弄清楚。 在我看来,前两个是一样的?
我有以下class级。 class Test{ public HashSet<string> Data = new HashSet<string>(); } 我需要从不同的线程更改字段“数据”,所以我想对我目前的线程安全实现一些意见。 class Test{ public HashSet<string> Data = new HashSet<string>(); public void Add(string Val){ lock(Data) Data.Add(Val); } public void Remove(string Val){ lock(Data) Data.Remove(Val); } } 有没有更好的解决scheme,直接去现场,并保护它从multithreading并发访问?
我是新来的multithreading,并试图了解互斥体如何工作。 有很多谷歌search, 我find了一个体面的教程 ,但它仍然留下了一些工作,因为我创build了自己的程序,其中locking不起作用的怀疑。 一个绝对不直观的互斥语法是pthread_mutex_lock( &mutex1 ); ,它看起来像互斥体被locking,当我真正想locking的是其他一些variables。 这个语法是否意味着locking一个互斥锁,locking一段代码,直到互斥锁被解锁? 那么线程怎么知道这个区域被locking? [ 更新:线程通过 内存屏蔽 知道该区域被locking ]。 而不是这样的现象应该被称为临界区? [ 更新:临界区对象仅在Windows中可用,其中对象比互斥体快,只有实现它的线程才可见。 否则,关键部分只是指由互斥体保护的代码区域 ] 简而言之,能否请您介绍一下最简单的互斥示例程序以及关于它如何工作的逻辑的最简单可能的解释 ? 我相信这会帮助其他许多新手。