我正在生成一个生成二进制数据表的工具的框架中.我计划让这个多线程充分利用我拥有的24个核心.(我估计在一个线程中,生成数据的时间大约为50天).我过去使用带有套接字通信的服务器/客户端设计完成了这项工作,因为我需要在多台机器上分发它.
这一次,我正在研究一种机器/多线程方法,并试图找出如何以正确的方式做到这一点.
主线程将处理每个子线程的任务分配并确定到分配的内存中的偏移量.
每个线程将写入分配的内存中的唯一地址范围.因为这些块在记录之间永远不会重叠,所以没有两个线程会尝试写入相同的偏移量.
void computeRecord(void *taskInput)
{
struct TaskData *taskData = (TaskData *)(taskInput);
RecordData data;
// A huge long computation block to populate data
// (4-5 second run time)
long record_id = taskData->record_id;
char *buffer = taskData->start_buffer;
// mutex lock needed here ??
int n_bytes = sizeof(RecordData)
memcpy( (char *)(buffer+record_id*n_bytes), (char *)(&recordData) n_bytes);
// mutex unlock here ?
}
Run Code Online (Sandbox Code Playgroud)
设置时间长.简短的问题.在这种情况下,互斥是必要的吗?