对于start_thread的线程,访问packetlist的线程启动_ activity thread(主线程)在信号量上睡觉时,它是安全的。如果不是这样,我该如何共享它们之间的资源,请注意,只会读取访问权限,而PAXETLIST不会更改。
class A{
Vector<packet> packetList;
A()
{
//packetList initialized here
}
void start_thread()
{
//start a thread here
}
void start_activity()
{
while(true)
{
//possibly sleep on semephore
//do work
}
}
}
您可以访问向量,只要您不迭代它。如果您迭代它,则需要在该对象上握住synchronized
的锁。
如果要排队"数据包"工作,我建议您使用blockingqueue,可以在其中等待添加新任务,或者使用将队列与threadpool结合在一起的executorService。
<。 <</p>如果我正确理解,您的问题是"我正在使用信号量来同步线程访问共享数据结构" - 在这种情况下,答案是"绝对是",前提
while(true)
{
//acquire lock
//do work
//release lock
}
,您在主线程上具有匹配结构(即您在完成任何工作之前获取锁) - 这将确保线程对向量的访问正确同步