Добрый деньХочу сделать такую штуку на QAtomicКодC++ (Qt)QAtomicInt state;void AcquireRead( void ){while (true) { if (state >= 1024) { // старший бит взведен - данные недоступны DoNothing(); // холостой ход continue; // крутимся в while (рано или поздно др. нитка сбросит старший бит) } state.fetchAndAddAcquire(1); // атомарно увеличиваем счетчик (еще 1 нитка имеет доступ к данным) break; // доступ получен}}Очевидно что это не будет работать правильно, др. нитка может вклиниться и установить старший бит уже после того как он прочитанКодC++ (Qt) if (state >= 1024)
|