【发布时间】:2015-10-03 02:53:36
【问题描述】:
我有一个由多个线程同时访问的全局结构对象数组。但是,可以保证由两个不同线程一次访问的结构对象(在特定数组索引处)的各个数据成员总是不同的。
我的问题是我是否需要在这个全局数组上设置互斥锁才能访问它。
我的结构如下所示:
struct data{
string a;
int b;
uint16_t c;
};
编辑:
我有一个多线程 UDP 服务器程序,它创建固定数量的线程并在同一个全局 UDP 套接字上执行 recvfrom() 阻塞。无论哪个线程首先收到数据报,都会处理该数据报。在这种情况下,为了方便客户端数据的存储,我有这个全局对象数组。就我而言,对数据成员的处理将按以下顺序进行:string a, int b, uint16_t c。没有两个线程会访问同一个对象的同一个数据成员,因为客户端不会发送对 item b 的请求,直到它收到对 item a 的响应并且数组由 client_number 索引。
【问题讨论】:
-
你怎么知道两个不同的线程不会同时使用同一个对象?
-
@Mr. E - 索引可能按偶数/奇数、下三分之一、中三分之一、上三分之一等分布在线程上。
-
在这种情况下,两个不同的线程永远不会使用同一个对象,但是 OP 说两个线程不会同时使用同一个对象。
标签: c multithreading