#include <mutex>
template <int N, typename T>
class threadsafe_array {
int count_writes = 0;
T data[ N ];
mutable std::mutex mutexes[ N ];
// or
mutable std::mutex mutexes[ 1000 ];
public:
threadsafe_array() {}
T Get( int index ) const {
mutexes[ index ].lock();
// or
mutexes[ index % 1000 ].lock();
T ret_val = data[ index ];
mutexes[ index ].unlock();
return ret_val;
}
void Set( int index, T value ) {
mutexes[ index ].lock();
data[ index ] = std::move( value );
++count_writes;
mutexes[ index ].unlock();
}
};