Вам нужен простой мьютекс и выполните:
mutex.lock();
//access array using index
mutex.unlock();
Или POSIX обеспечивает блокировку чтения-записи. Поэтому вы можете сделать:
pthread_rwlock_rdlock(rw_lock_ptr);
// read the array
pthread_rwlock_unlock(rw_lock_ptr);
И
pthread_rwlock_wrlock(rw_lock_ptr);
// update the array
pthread_rwlock_unlock(rw_lock_ptr);
Это позволяет использовать общие блокировки для операций чтения и эксклюзивные блокировки для операций записи.
Я бы предложил, чтобы у вас был класс или пара для каждого элемента массива и реализован один из вышеперечисленных. Если вы скрываете блокировку мьютекса в функциях чтения / обновления класса, то вы можете легче ограничить область применения блокировок мьютекса и избежать взаимных блокировок.