我在网上查找了很久,但没有得到满意的答案。
memcpy是否线程安全?(在Windows系统中)
我的意思是,如果我使用一个单独的memcpy写入到在进程之间共享的内存区域(使用boost::shared_memory_object),然后尝试使用一个单独的memcpy从另一个进程中读取该区域,那么其中一个进程会自动被阻塞,直到写操作完成吗?我可以在哪里阅读相关信息?
我在网上查找了很久,但没有得到满意的答案。
memcpy是否线程安全?(在Windows系统中)
我的意思是,如果我使用一个单独的memcpy写入到在进程之间共享的内存区域(使用boost::shared_memory_object),然后尝试使用一个单独的memcpy从另一个进程中读取该区域,那么其中一个进程会自动被阻塞,直到写操作完成吗?我可以在哪里阅读相关信息?
memcpy通常是为了速度而编写的。它不会是线程安全的。如果您需要这个功能,您需要在临界区内执行memcpy调用或使用其他信号量机制。
take_mutex(&mutex);
memcpy(dst, src, count);
yield_mutex(&mutex);
memcpy
线程不安全,而是因为您正在操作共享内存。 - not-a-usermemcpy不是线程/进程安全的
memcpy
。这应该是显然的,因为不同的进程实际上有自己的memcpy
副本,就像它们拥有任何其他函数的副本一样。(或者至少在共享C库的情况下,操作系统保证行为与每个进程拥有自己的副本时相同。) - not-a-useropen
,read
和write
不是进程安全的。(无论如何,我怎么通知init
或explorer.exe
,我现在要调用write
?) - not-a-user像memcpy()(或memmove())这样的例程是标准C库的一部分,通过标准的<string.h>头文件包含,并且对任何锁定机制一无所知。锁定应该由某种外部方式提供,比如进程间互斥、信号量或类似的东西。