У меня есть массив в разделяемой памяти в параллельной программе, где каждый поток напрямую связан с одной ячейкой в массиве. У меня есть функция, которая должна получить разницу между ячейкой, с которой связан поток, и одной из соседних ячеек, с которой этот поток не связан. Я не уверен, как организовать mutex
s для защиты памяти, когда поток обращается к своей собственной ячейке или соседней ячейке наиболее эффективным способом. Это то, что у меня сейчас есть, но я не уверен, есть ли лучший способ или нет.
// Assume `myArray` is a global int array used for sharing resources between the threads.
// Assume `semaphoreArray` is an array of pthread `mutex`s with same size as `my_array`.
int difference (int id, int neighbor) // id allows us to identify the thread
{
int currentIdsValue;
int neighboringIdsValue;
pthread_mutex_lock (& (semaphoreArray[id]));
currentIdsValue = myArray[id];
pthread_mutex_unlock (& (semaphoreArray[id]));
pthread_mutex_lock (& (semaphoreArray[neighbor]));
neighboringIdsValue = myArray[neighbor];
pthread_mutex_unlock (& (semaphoreArray[neighbor]));
return (currentIdsValue - neighboringIdsValue);
}
Мне интересно, должен ли я использовать два семафорных массива для каждой ячейки, к которой осуществляется доступ в массиве.
Примечание : требуется библиотека pthread
, к сожалению, не может использоваться std::thread
.