Я хочу дать каждому потоку, который входит в функцию, объект, который она будет использовать (в данном случае он представляет страницу памяти). Это сделано для того, чтобы сократить синхронизацию, в которой моя программа не работает, поэтому в идеале она не должна блокировать мьютекс.
минималистский пример того, что я пытаюсь сделать (std::map
не может быть вставлен одновременно, но если бы это было возможно, это сделало бы именно то, что мне нужно):
// multiple threads can access this, they should be able to do so without synchronization
void addJob(ThreadMemory * mem){
// straight-forward, but undefined when used concurrently:
static std::map<std::thread::id, ThreadMemoryPool> memPool;
memPool[std::this_thread::get_id()].addRef(mem);
// if memPool has no node for this thread, one is inserted,
// every thready would be guaranteed one ThreadMemoryPool object
}
Есть ли способ достичь того же ... общего эффекта, которого хотели бы достичь эти две линии без блокировки?