Разница двух ячеек в массиве общей памяти (параллелизм) - PullRequest
0 голосов
/ 28 августа 2018

У меня есть массив в разделяемой памяти в параллельной программе, где каждый поток напрямую связан с одной ячейкой в ​​массиве. У меня есть функция, которая должна получить разницу между ячейкой, с которой связан поток, и одной из соседних ячеек, с которой этот поток не связан. Я не уверен, как организовать 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.

...