来自start_thread的线程是安全的,当start_activity线程(主线程)在信号量上休眠时访问packetList。如果没有,那么我如何在它们之间共享资源,请注意只能读取访问权限并且不会更改packetList。
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
}
}
}
答案 0 :(得分:0)
如果您不迭代它,您可以访问Vector。如果您对其进行迭代,则需要在该对象上保持synchronized
锁定。
如果你想对“数据包”进行排队,我建议你看一下使用BlockingQueue,你可以等待添加新任务,或者使用一个将Queue和ThreadPool结合起来的ExecutorService。
答案 1 :(得分:0)
如果我理解正确,你的问题就是“我正在使用信号量来同步对共享数据结构的线程访问” - 在这种情况下答案是“肯定是”,只要你对Vector的访问权限是准确的如上所述,即:
while(true)
{
//acquire lock
//do work
//release lock
}
并且你在主线程上有一个匹配的结构(即你在做任何工作之前获得了锁) - 这将确保线程对Vector的访问被正确同步