#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();
        }
};