我对多线程系统很陌生,并且对对象的合适数据结构有疑问。
我有一个具有多个属性的对象图像,其中两个是存储图像数据的字节数组数据和存储状态的 int 变量状态。
我有某种形式的传送带架构,这意味着有一个相机线程将数据存储到图像属性中,然后是一个转换器线程,然后是一个处理线程。所以一个线程必须处理前一个线程的输出。
为了避免同步和提高效率,我的想法是有一个LinkedList<Image>
存储图像对象。网络摄像头线程创建第一个图像对象,分配状态=1(表示数据正在写入),如果完成并转到下一个图像,则分配状态=2。以下转换器线程仅读取状态属性,如果为 1,则休眠或等待(可由网络摄像头线程发出信号),如果为 2,则分配状态 3 并开始工作。完成后,它将设置状态 = 4 并继续下一个图像对象。下一个线程再次读取状态,如果状态 < 4 则将休眠,依此类推。
最后我的问题是,两个不同线程可能同时访问是否会导致问题,同时确保只有一个是写操作,而另一个(读)访问甚至是在不同的属性/变量上进行的(相同的)目的)。