我看过网上的电影并且无法满足自己的答案。
memcpy线程安全吗? (在Windows中)
我的意思是,如果我使用单个memcpy写入进程之间共享的内存区域(使用boost :: shared_memory_object),然后尝试从另一个memcpy读取该区域 使用单个memcpy进程然后将自动阻止一个进程 写的是什么时候发生的?我在哪里可以读到这个?
答案 0 :(得分:11)
memcpy通常按原始速度编码。它不是线程安全的。如果需要,您需要在关键部分内执行memcpy调用或使用其他一些信号机制。
take_mutex(&mutex);
memcpy(dst, src, count);
yield_mutex(&mutex);
答案 1 :(得分:6)
memcpy不是线程/进程安全的
答案 2 :(得分:3)
例如memcpy()(或memmove())之类的例程是标准C库的一部分,通过标准< string.h>包含在内。标题并且对任何锁定机制一无所知。锁定应该通过一些外部方式提供,如进程间互斥,信号量或类似的东西。
答案 3 :(得分:3)
你混淆了“原子”和“线程安全”。如果您在共享区域中同时读取和写入数据(有或没有memcpy
),那就不安全了。但当然复制数据本身就是线程安全的。
memcpy
本身也是线程安全的,至少在POSIX系统上看到this one,因此我猜它也在Windows上。任何其他东西都会使它变得毫无用处。
如果它是“自动阻止”,它必须是原子的(或者至少管理它自己的锁),这会降低你的系统速度。因此,在您的情况下,您应该使用自己的锁。