単純な問題がありますが、まだ適切な解決策が見つかりません (C#)
- 時々特定のリソースを使用するメインクラスでメインスレッドを実行しているとします
char[] arena_snapshot
(これを解析し、これに基づいてアリーナを更新します)。 - また、共有リソースを更新し続けるワーカー スレッドを開始しました
char[] arena_snapshot
。
ワーカー スレッドの解析中にバッファが変更され、メイン スレッドがバッファを誤って解析する可能性はありますか。また、解析中に arena_snapshot をロックするにはどうすればよいですか?
class Arena
{
List<PLayer> players;
...
public int main()
{
arenaClient = new ArenaClient();
Thread arenaListener = new Thread(new ThreadStart(arenaClient.StartListener));
arenaListener.IsBackground = true;
arenaListener.Start(); //Start UDP worker
}
public void Update()
{
//Let's parse the buffer and update our Arena ..
...
foreach (Player p in players)
{
play.Position.X = arenaClient.arena_snapshot[2];
//etc...
}
}
}
class ArenaClient
{
...
public char[] arena_snapshot; //hold most recent information about our Arena (snapshot)
...
public void StartListener()
{
while(!done)
{
...
//Warning! Updating the snapshot, warn the main thread! Don't do this during parsing of the snapshot!
arena_snapshot = UDPClient.Receive(ref groupEP);;
...
}
}
}