繁体   English   中英

关于memcpy函数的任何多线程问题?

[英]Any multi-thread concern on memcpy function?

memcpy(a, b, sizeof(a));

VS

a[0] = b[0];
a[1] = b[1];
...

假设memcpy应该具有较小的代码大小和较高的效率,但是在多线程系统中memcpy是否存在任何风险?

  1. 如果缓冲区是互斥的,这意味着线程不会竞争访问复制所涉及的数据,那么memcpy在多线程环境中使用是绝对安全的。 该函数除了修改目标缓冲区外,没有任何持久状态,也没有其他副作用。

  2. 此外,只要没有线程尝试更改该缓冲区,就可以任意数量的线程共享的缓冲区中安全地执行多线程复制。

  3. 但是一旦线程之间存在写入任何共享缓冲区的竞争, memcpy将不再保证线程安全,即操作不是原子的。 除了2中描述的内容外,在同一缓冲区上同时运行的两个memcpy会相互干扰,并产生不可预测的结果。

如果不使用锁来确保排他性,则仅使用memcpy()会非常危险! memcpy()仅负责复制内存,不能确保线程安全,您应该自己添加锁。 在C语言中,在用户空间中,可以使用mutex确保互斥。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM