memcpy是否安全?

时间:2013-02-28 20:36:01

标签: c++ c process thread-safety memcpy

我看过网上的电影并且无法满足自己的答案。

memcpy线程安全吗? (在Windows中)

我的意思是,如果我使用单个memcpy写入进程之间共享的内存区域(使用boost :: shared_memory_object),然后尝试从另一个memcpy读取该区域 使用单个memcpy进程然后将自动阻止一个进程 写的是什么时候发生的?我在哪里可以读到这个?

4 个答案:

答案 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上。任何其他东西都会使它变得毫无用处。

如果它是“自动阻止”,它必须是原子的(或者至少管理它自己的锁),这会降低你的系统速度。因此,在您的情况下,您应该使用自己的锁。