Questions tagged «thread-safety»

如果一段代码仅以允许多个线程一致地执行此代码的方式操作数据结构,则它是线程安全的。代码可能是线程安全的,有条件的安全(需要互斥)或不安全的(只能由一个线程安全使用)。

11
线程安全是什么意思?
最近,我尝试从线程(UI线程除外)访问文本框,并引发了异常。它说了一些有关“代码不是线程安全的”的内容,因此我最终编写了一个委托(MSDN的示例有所帮助)并改为调用它。 但是即使如此,我还是不太明白为什么所有额外的代码都是必需的。 更新:如果我检查,是否会遇到任何严重的问题 Controls.CheckForIllegalCrossThread..blah =true

15
线程安全的List <T>属性
我想要一个List&lt;T&gt;作为属性的实现,可以毫无疑问地在线程安全地使用它。 像这样: private List&lt;T&gt; _list; private List&lt;T&gt; MyT { get { // return a copy of _list; } set { _list = value; } } 似乎仍然需要返回集合的副本(克隆的),因此,如果在某个地方我们正在迭代集合并且同时设置了集合,则不会引发异常。 如何实现线程安全的集合属性?



8
实现线程安全字典的最佳方法是什么?
通过从IDictionary派生并定义私有SyncRoot对象,我能够在C#中实现线程安全的Dictionary: public class SafeDictionary&lt;TKey, TValue&gt;: IDictionary&lt;TKey, TValue&gt; { private readonly object syncRoot = new object(); private Dictionary&lt;TKey, TValue&gt; d = new Dictionary&lt;TKey, TValue&gt;(); public object SyncRoot { get { return syncRoot; } } public void Add(TKey key, TValue value) { lock (syncRoot) { d.Add(key, value); } } // more IDictionary …


2
SecureRandom线程安全吗?
是SecureRandom线程安全的?也就是说,在对其进行初始化之后,能否依靠下一个随机数来确保线程安全?检查源代码似乎表明事实确实如此,并且此错误报告似乎表明其缺乏作为线程安全的文档是javadoc的问题。有没有人确认它实际上是线程安全的?

3
Python字典中的线程安全
我有一堂课,有一本字典 class OrderBook: orders = {'Restaurant1': None, 'Restaurant2': None, 'Restaurant3': None, 'Restaurant4': None} @staticmethod def addOrder(restaurant_name, orders): OrderBook.orders[restaurant_name] = orders 我正在运行4个线程(每个餐厅一个线程)来调用方法OrderBook.addOrder。这是每个线程运行的函数: def addOrders(restaurant_name): #creates orders ... OrderBook.addOrder(restaurant_name, orders) 这样安全吗,还是在致电之前必须使用锁addOrder?

4
iPhone ios在单独的线程中运行
在单独的线程上运行代码的最佳方法是什么?是吗: [NSThread detachNewThreadSelector: @selector(doStuff) toTarget:self withObject:NULL]; 要么: NSOperationQueue *queue = [NSOperationQueue new]; NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(doStuff:) object:nil; [queue addOperation:operation]; [operation release]; [queue release]; 我一直在做第二种方式,但我一直在阅读的《韦斯利食谱》使用的是第一种方式。

3
全局变量在烧瓶中是线程安全的吗?如何在请求之间共享数据?
在我的应用程序中,公共对象的状态通过发出请求来更改,并且响应取决于状态。 class SomeObj(): def __init__(self, param): self.param = param def query(self): self.param += 1 return self.param global_obj = SomeObj(0) @app.route('/') def home(): flash(global_obj.query()) render_template('index.html') 如果我在开发服务器上运行它,我希望得到1、2、3,依此类推。如果同时从100个不同的客户发出请求,会出问题吗?预期结果将是100个不同的客户端各自看到一个从1到100的唯一数字。或者会发生以下情况: 客户端1查询。self.param增加1。 在执行return语句之前,线程将切换到客户端2。self.param再次增加。 线程切换回客户端1,并向客户端返回数字2,例如。 现在,该线程移至客户端2,并向其返回数字3。 由于只有两个客户,因此预期结果是1和2,而不是2和3。跳过了一个数字。 当我扩展应用程序时,这是否真的会发生?我应该考虑使用什么替代全局变量?


3
如何知道红宝石不是线程安全的?
从Rails 4开始,默认情况下所有内容都必须在线程环境中运行。这意味着所有我们写的代码和 所有我们使用需要是宝石threadsafe 因此,我对此没有几个问题: 在ruby / rails中,什么不是线程安全的?VS什么是Ruby / Rails中的线程安全? 是否有宝石的列表被称为是线程安全的,反之亦然? 是否有不是线程安全示例的常见代码模式列表@result ||= some_method? ruby lang核心中的数据结构(例如Hashetc线程)是否安全? 在MRI上,一个GVL/GIL表示一次只能运行1条红宝石线程,除了IO,线程安全更改对我们有影响吗?

6
如何进行JUnit测试等待?
我有一个JUnit测试,我想同步等待一段时间。我的JUnit测试如下所示: @Test public void testExipres(){ SomeCacheObject sco = new SomeCacheObject(); sco.putWithExipration("foo", 1000); //WAIT FOR 2 SECONDS assertNull(sco.getIfNotExipred("foo")); } 我尝试了Thread.currentThread()。wait(),但是它抛出了IllegalMonitorStateException(如预期的那样)。是否有一些技巧,还是我需要其他显示器?



By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.