race-condition 相关问题

竞争条件是多个线程/进程/客户端都使用资源,而没有正确使用锁。

如何解决 OpenMP 上的竞争条件?

bool clusterExists(std::string& infoSet) { 布尔存在{false}; #pragma omp 关键 存在 = mInfoMap.find(infoSet) != mInfoMap.end(); 返回存在; } InfoSet* get(std::string&a...

回答 1 投票 0

如何解决分布式系统中写入数据库的竞争条件

假设我有一项服务允许员工创建费用报告。该服务将每个费用报告作为一行写入某个数据库中。该服务可以有多个实例运行...

回答 1 投票 0

如何锁定兄弟姐妹以防止竞争情况

型号: 班级清单 has_many :清单项目 结尾 类清单项目 属于:清单 after_save :update_checklist_completion def update_checklist_completion 如果是兄弟姐妹的话。

回答 1 投票 0

多线程Python应用程序可以更改CWD吗?

此代码中的断言语句会在任何 Python 3.11+ 解释器下引发错误吗? 如果没有使用任何异步功能的此代码,当前工作目录是否可以由另一个模块更改?

回答 1 投票 0

stat() 和 std::remove() 的使用 - TOCTOU 问题

我有以下形式的程序: 统计(检查某个文件) …… …… …… std::remove(删除相同文件) 我能想到的两个解决方案: 一是在...之前再次使用 stat()

回答 1 投票 0

Node.js 使用 cluster/pm2 避免数据库竞争状况

我有一个 Node 应用程序,它使用 pm2 以集群模式运行。 我还有一个函数可以检查特定行是否在数据库表中。如果该行丢失,它将创建该行,否则为一个值...

回答 2 投票 0

ARM 32 位 MCU 上的原子 64 位计数器,无锁

在 ARM Cortex M 32 位上,在 C 下,我需要维护一个 64 位计数器。我想避免像这样的竞争条件: 开始: 计数 = 0x00000000 ffffffff 线程A:递增count_low 可以...

回答 1 投票 0

将相同的值写入相同的内存位置是否会导致数据争用?

考虑以下代码,该代码从多个线程将相同的值写入相同的内存位置: 无效 f(int* buf, int n, int* p) { for(int i = 0; i < n; i++) buf[i] = i; ...

回答 4 投票 0

SQL插入语句流程是怎样的?

是否获取表的当前状态并在其中插入行,或者直接将行插入表中而不关心表的状态? 我问这个是因为我不确定......

回答 1 投票 0

同步查找集合的线程安全和内存泄漏考虑

在我正在处理的程序(ASP.NET 应用程序)中,我有一个静态只读的内存中查找集合(在 ASP.NET 应用程序的所有线程之间共享)。 我知道这不是正统...

回答 1 投票 0

具有共享运行时的 Excel 加载项 - displayDialogAsync 上出现未处理的异常

我正在开发一个使用弹出窗口(displayDialogAsync)的办公室任务窗格加载项。 我希望 displayDialogAsync 无论使用单独的运行时还是共享运行时都能以相同的方式工作,但在

回答 1 投票 0

代码中是否存在可能的竞争条件,为什么?

我有以下代码: #包括 #包括 #包括 #包括 #包括 #包括 #包括 我有以下代码: #include <string> #include <thread> #include <memory> #include <condition_variable> #include <mutex> #include <deque> #include <iostream> #include <vector> #include "third_party/concurrentqueue.h" struct Dummy { std::string name_; }; class Consumer { public: Consumer() { is_running_ = true; data_thread_ = std::unique_ptr<std::thread>( new std::thread(&Consumer::listening, this)); } void push(std::shared_ptr<Dummy> frame) { nice_queue.enqueue(frame); } virtual void listening() { while (is_running_) { std::shared_ptr<Dummy> frame; if (nice_queue.try_dequeue(frame)) { // Is there a possible race condition, // as there is no memory fence? std::cout << frame->name_ << std::endl; // <<<<<< } } } std::unique_ptr<std::thread> data_thread_; moodycamel::ConcurrentQueue<std::shared_ptr<Dummy>> nice_queue; std::atomic<bool> is_running_; }; class Producer { public: Producer(std::shared_ptr<Consumer> consumer) :consumer_(consumer){} void send(std::shared_ptr<Dummy> frame) { consumer_->push(frame); } protected: std::shared_ptr<Consumer> consumer_; }; int main() { std::shared_ptr<Consumer> consumer = std::make_shared<Consumer>(); Producer prod(consumer); for(int i =0; i<100; i++){ auto item = std::make_shared<Dummy>(); item->name_ = std::to_string(i); prod.send(item); } } 如代码所示,Producer将一个项目发送到Consumer以在另一个线程中处理,因此两件事严格地相继发生,但由于没有内存栅栏,是否有可能当 Consumer 处理该项目,它看不到该项目的最终版本,因此具有未定义的行为? 同步发生在 moodycamel::ConcurrentQueue 的幕后。 正如名称(和文档)所示,它是一个线程安全队列。因此可以同时从不同线程写入和读取。 喜怒无常的骆驼文档 您发送shared_ptr的事实不会对这里产生任何影响。

回答 1 投票 0

c++ 是否存在可能的竞争条件,为什么?

我有以下代码, #包括 #包括 #包括 #包括 #包括 #包括 #包括 我有以下代码, #include <string> #include <thread> #include <memory> #include <condition_variable> #include <mutex> #include <deque> #include <iostream> #include <vector> #include "third_party/concurrentqueue.h" struct Dummy { std::string name_; }; class Consumer { public: Consumer() { is_running_ = true; data_thread_ = std::unique_ptr<std::thread>(new std::thread(&Consumer::listening, this)); } void push(std::shared_ptr<Dummy> frame) { nice_queue.enqueue(frame); } virtual void listening() { while (is_running_) { std::shared_ptr<Dummy> frame; if (nice_queue.try_dequeue(frame)) { std::cout << frame->name_ << std::endl; //<--- is here a possible race condition as there is no memory fence } } } std::unique_ptr<std::thread> data_thread_; moodycamel::ConcurrentQueue<std::shared_ptr<Dummy>> nice_queue; std::atomic<bool> is_running_; }; class Producer { public: Producer(std::shared_ptr<Consumer> consumer) :consumer_(consumer){} void send(std::shared_ptr<Dummy> frame) { consumer_->push(frame); } protected: std::shared_ptr<Consumer> consumer_; }; int main() { std::shared_ptr<Consumer> consumer = std::make_shared<Consumer>(); Producer prod(consumer); for(int i =0; i<100; i++){ auto item = std::make_shared<Dummy>(); item->name_ = std::to_string(i); prod.send(item); } } 我的问题是,如代码所示,Producer将一个项目发送到Consumer以在另一个线程中处理,因此两件事严格地相继发生,但由于没有内存栅栏,是否有可能当 Consumer 处理该项目时,它看不到该项目的最终版本,因此具有未定义的行为? 同步发生在 moodycamel::ConcurrentQueue 的幕后。 正如名称(和文档)所示,它是一个线程安全队列。因此可以同时从不同线程写入和读取。 喜怒无常的骆驼文档 您发送shared_ptr的事实不会对这里产生任何影响。

回答 1 投票 0

根据之前的几个状态更新反应状态

假设我有两个反应状态:a和b const [a, setA] = useState(2) const [b, setB] = useState(10) 我想添加一个按钮,该按钮将根据它们之前的值更新它们:

回答 1 投票 0

Python中多个线程可以执行同一个实例方法吗?

如果我们有一个实例方法,它进行 api 调用并且不修改任何实例属性,它是否可以在多个线程中同时执行,而不会引起任何竞争条件? 自从...

回答 1 投票 0

如何在不同调用之间的 React useEffect 挂钩中获取竞争条件标志?

这个问题可能是一个简单的问题,但我在搜索中没有找到任何内容。不同的 useEffect 挂钩调用如何共享获取竞争条件标志中的值? 我的意思是,在...

回答 2 投票 0

并行请求上的 Django 完整性错误

我有: 完整性错误 重复的键值违反了唯一约束“user_pkey” 详细信息:密钥 (id)=(3220037) 已存在。 这发生在这部分代码中 用户 = 使用...

回答 1 投票 0

如果 std::atomic<T>::compare_exchange_weak 的期望值是非原子操作的返回值,它仍然是原子的吗?

head.load()->next 是否会破坏 while(head && !head.compare_exchange_weak(ptr, head.load()->next)); 中使用的 std::atomic::compare_exchange_weak 的原子性? ?我相信这是...

回答 2 投票 0

Valgrind (Helgrind):可能的数据竞争调试

有人可以帮我弄清楚这是否真的是我的错误造成的,或者因为 helgrind 在这种情况下无法正确追踪它? 我也想知道“在...”是什么意思。在这种情况下......

回答 1 投票 0

两个并发 API 调用在 SQL SERVER 中错误地更新数据

我有一个 API,可以添加新行或更新 SQL 表中的行。如果 payload 的 ID 大于 0,那么它会根据给定的 ID 更新表,否则它会插入一个新行并返回...

回答 1 投票 0

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