[英]Any multi-thread concern on memcpy function?
memcpy(a, b, sizeof(a));
VS
a[0] = b[0];
a[1] = b[1];
...
假设memcpy
应该具有较小的代码大小和较高的效率,但是在多线程系统中memcpy
是否存在任何风险?
如果缓冲区是互斥的,这意味着线程不会竞争访问复制所涉及的数据,那么memcpy
在多线程环境中使用是绝对安全的。 该函数除了修改目标缓冲区外,没有任何持久状态,也没有其他副作用。
此外,只要没有线程尝试更改该缓冲区,就可以从任意数量的线程共享的缓冲区中安全地执行多线程复制。
但是一旦线程之间存在写入任何共享缓冲区的竞争, memcpy
将不再保证线程安全,即操作不是原子的。 除了2中描述的内容外,在同一缓冲区上同时运行的两个memcpy
会相互干扰,并产生不可预测的结果。
如果不使用锁来确保排他性,则仅使用memcpy()
会非常危险! memcpy()
仅负责复制内存,不能确保线程安全,您应该自己添加锁。 在C语言中,在用户空间中,可以使用mutex
确保互斥。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.