複数のスレッド/プロセス間で共有される (固定サイズの) 配列があるとします。
配列内の特定の位置から読み書きしたいだけの場合に、配列全体へのアクセスをロックする必要がないように、ロック/ミューテックス用の (一般化された、最適に軽量な) メカニズムはありますか?
強引なアプローチは、配列内の各要素に対して 1 つのミューテックスを単純に持つことです。ただし、これは少し太りすぎのようで、別の解決策を探しています。
私が何を意味するかを示すための短い例:
//Setup
int a[50];
void threada()
{
lock(a,4); //supposed to lock index 4 of array a from access by other threads
write(a,4); //writes something to index 4
unlock(a,4);
}
void threadb()
{
//now all of this shouldn't block, since i'm accessing index 5, not 4
lock(a,5); //supposed to lock index 5 of array a from access by other threads
write(a,5); //writes something to index 5
unlock(a,5);
}
void threadc()
{
//all of this, however, should block if threada is already accessing it
lock(a,4); //supposed to lock index 4 of array a from access by other threads
write(a,4); //writes something to index 4
unlock(a,4);
}