我有一个库,它为全局字节缓冲区提供读写功能。以下伪代码基本上显示了其内容:
#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原子 - 但我不确定这是否可以实现。我发现文档很差......
非常感谢任何帮助或其他有趣的方法。