thread-safety 相关问题

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


如何在大函数内编写多线程函数?

我有一个这样的函数,可以正常工作:void BigFunction(){void FunctionA(std :: shared_ptr c); }现在我想在BigFunction()中添加另一个函数void FunctionB(...

回答 1 投票 0

使用类中的对象的锁定

我有一个如下所示的旧代码库,我想通过使用对象上的锁来确保我们不会多次初始化该类。他们是不是试图通过编写...

回答 1 投票 0

[Parallel.Foreach具有共享的绝对索引,对于所有并行过程

例如,我正在运行一个进程,一次可处理10个文件。如果输入文件数组,我需要根据输入顺序分配序列号。因此,对于每个并行进程,我需要...

回答 1 投票 0

仅在线程循环的末尾执行lock.notify()才执行

public class MyVisibility {private static int count = 0;私有静态对象锁= new Object();公共静态无效main(String [] args){new MyVisibility.thread1()。start(); ...

回答 1 投票 0

PyQt5 + Python 3:传递列表,命令作为跨线程的信号参数

我正在使用pyqtSignal将python列表作为参数从工作线程发送到主线程。 qt何时创建作为参数传递的对象的副本。根据:http://www.embeddeduse ....

回答 2 投票 4

[使用Java Runnable的不良类设计

您能否解释为什么在下面的程序中以这种方式实现Runnable接口是一个错误的设计决定?凭直觉,如果我必须自己写这篇文章,我将把它做成自己的酒店...

回答 1 投票 0

是否存在不同类型的比赛条件?

我知道有数据竞赛,其他竞赛条件可以细分为不同的类别吗?最终,所有竞争条件都是由于数据以错误的顺序访问,因此前导...

回答 1 投票 0

C#只读列表线程同步

[我在这里正在通过for-each和索引方法在多个线程中浏览只读列表。结果看起来线程安全,但我不相信。有人可以告诉下面的代码(...

回答 3 投票 2

C#线程中的只读字段安全吗?

C#线程中的只读字段安全吗?公共类Foo {private readonly int _someField;公共Foo(){_someField = 0; } public Foo(int someField){_someField = someField; ...

回答 3 投票 24

Objective-C中的原子属性与线程安全

在我已阅读的大多数讨论中,它表明使属性成为原子并不能保证它是线程安全的,它只是保证返回的值不会由于一个值 而成为垃圾...] >

回答 5 投票 29

如何在Go中合并两个chan?

我应该编写函数func merge(f func(int)int,in1

回答 1 投票 -2

非线程安全类

为什么下面的类不是线程安全的?公共类UnsafeCachingFactorizer实现Servlet {私有最终AtomicReference lastNumber = new AtomicReference <>(); ...

回答 1 投票 1

非线程sfae类

为什么下面的类不是线程安全的?公共类UnsafeCachingFactorizer实现Servlet {私有最终AtomicReference lastNumber = new AtomicReference

回答 1 投票 0


如何在同一进程中使用管道(线程安全)

我正在尝试在同一过程中使用管道:定义MAX_SIZE 200 int read_port; int send_port; void init(){int fd [2];管道(FD); read_port = fd [0]; send_port = fd [1]; } void消耗(...

回答 1 投票 0

C ++线程安全类,无法正常工作

我正在尝试实现线程安全的类。我为每个成员变量的setter和getter设置了lock_guard。 #include #include #include #include ]]]] 您看到的输出很好,只有您的期望落空了。 您可以通过以下方式将元素添加到向量中: void insertInVec(int x) { std::lock_guard<std::mutex> lock(m_mutex); m_vec.push_back(x); } 然后通过以下方式检索它们: int getValAtIdx(int i) { std::lock_guard<std::mutex> lock(m_mutex); return m_vec[i]; } 因为循环是并行执行的,所以不能保证以期望的顺序插入值。如果您想要的话,则需要预先调整向量的大小,然后使用以下方法: void setInVecAtIndex(int x,size_t index) { std::lock_guard<std::mutex> lock(m_mutex); m_vec[index] = x; } 所以这不是您的代码的问题。但是,有两个问题: getValAtKey返回对映射中值的引用。它是const引用,但不会阻止其他人通过调用insertInMap来修改该值。在此处返回引用会破坏使用锁的目的。使用该引用不是线程安全的!为了使其线程安全,您需要返回副本。 您忘记保护编译器生成的方法。有关概述,请参见What are all the member-functions created by compiler for a class? Does that happen all the time?。编译器生成的方法将不使用您的getter和setter,因此默认情况下不是线程安全的。您应该自己定义它们,或delete它们。

回答 1 投票 0

Scala多线程迭代器

我正在使用scala迭代器在同步块中等待循环:anObject.synchronized {如果(Try(anObject.foo())。isFailure){迭代器持续{

回答 1 投票 1

C#线程中止'安全句柄已关闭'

我有三类,主要,用户串行,主要通信Comm中的通信;线程CoTH; UserSerial序列号;私人无效btnStart_Click(对象发送者,EventArgs e){CoTH =新Thread(()=&...

回答 1 投票 0

未在辅助线程中捕获异常,导致segfault

我交叉编译基于MIPS的平台。以下代码导致段错误,回溯导致__cxa_throw:#include #include #include #include&...

回答 1 投票 1

© www.soinside.com 2019 - 2024. All rights reserved.