C Prog:避免多线程读/写中的数据争用

时间:2018-02-27 17:57:44

标签: c multithreading atomic read-write

我有一个库,它为全局字节缓冲区提供读写功能。以下伪代码基本上显示了其内容:

#define LINESIZE 1024

char buffer[640 * LINESIZE];

void read(int x, int y, int len, char* value) {
    memcpy(value, &buffer[y*LINESIZE + x], len);
}

void write(int x, int y, int len, char* value) {
    memcpy(&buffer[y*LINESIZE + x], len);
}

现在,当我在我的应用程序中创建多个(多个)线程时,所有这些线程可以随时读取或写入该缓冲区。

什么是最好的阅读和写作方法w.r.t.相关的x,y,len集?

在memcpy周围使用互斥锁也会阻止对具有不同x,y,len值的缓冲区的读/写。

我正在考虑使用原子操作 - 或者更新的c11原子 - 但我不确定这是否可以实现。我发现文档很差......

非常感谢任何帮助或其他有趣的方法。

0 个答案:

没有答案