0

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
                    }
                }
            }
4

2 に答える 2

0

反復処理を行わない限り、Vector にアクセスできます。それを繰り返し処理する場合は、synchronizedそのオブジェクトでロックを保持する必要があります。

作業の「パケット」をキューに入れたい場合は、新しいタスクが追加されるのを待つことができる BlockingQueue の使用を検討するか、Queue と ThreadPool を組み合わせた ExecutorService を使用することをお勧めします。

于 2012-11-07T09:29:41.043 に答える
0

私が正しく理解している場合、あなたの質問は「共有データ構造へのスレッド アクセスを同期するためにセマフォを使用しています」の言い換えです。すなわち:

while(true)
    {
        //acquire lock
        //do work
        //release lock
    }

メインスレッドに一致する構造がある (つまり、作業を行う前にロックを取得する) - これにより、スレッドのベクトルへのアクセスが適切に同期されることが保証されます。

于 2012-11-07T09:30:35.970 に答える