内存是进程安全的

Is memcpy process-safe?

本文关键字:安全 进程 内存      更新时间:2023-10-16

我在网上找了一下,没有找到满意的答案。

内存是线程安全的吗?(在Windows中)

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

memcpy通常针对原始速度进行编码。它不是线程安全的。如果您需要这样做,则需要在临界区内部执行memcpy调用或使用其他信号机制。

take_mutex(&mutex);
memcpy(dst, src, count);
yield_mutex(&mutex);

memcpy不是线程/进程安全的

memcpy()(或memmove())等例程是标准C库的一部分,通过标准头,对任何锁定机制一无所知。锁应该通过一些外部方式提供,比如进程间互斥,信号量或类似的东西。

你混淆了"原子"answers"线程安全"。如果在共享区域中并发地读写数据(带或不带memcpy),这是不安全的。当然,复制数据本身是线程安全的。

memcpy本身也是线程安全的,至少在POSIX系统上看到这个,因此我猜它也在Windows上。

如果它是"自动阻塞",它必须是原子的(或者至少管理它自己的锁),这会减慢系统的速度。所以在您的情况下,您应该使用您自己的锁。