Учитывая отсутствие у меня знаний С++, пожалуйста, попробуйте прочитать мои намерения, а не мой плохой технический вопрос.
Это основа моей программы https://github.com/zaphoyd/websocketpp/blob/experimental/examples/broadcast_server/broadcast_server.cpp
Я создаю сервер веб-сокетов с помощью веб-сокета ++ (и, о, веб-сокет ++ сладок. Я настоятельно рекомендую), и я могу легко манипулировать данными пользователя с потокобезопасностью, потому что им действительно не нужно манипулировать разными потоками; однако я хочу иметь возможность писать в массив (я буду использовать универсальный термин «массив» из более слабых языков, таких как vb, php, js) в одном функциональном потоке (с несколькими итерациями, которые могут выполняться одновременно), а также читать в 1 и более потоках.
Возьмем стек в качестве примера: если бы я хотел, чтобы все id
s (столбец PRIMARY
всех статей) были отсортированы определенным образом, в данном случае по чистым голосам, и хранились в памяти, я думаю, что у меня была бы функция, которая вызывается в своем собственном boost::thread
, срабатывающем всякий раз, когда на сайте поступает голосование для изменения порядка массива.
Как я могу сделать это без блокировки и блокировки? Я на 100% согласен с пользователями, читающими из старого массива, в то время как другой строится, но я абсолютно не хочу, чтобы их чтение или запись потока когда-либо терпели неудачу/были заблокированы.
Существует ли массив без блокировок? Если нет, есть ли способ построить новый массив во временном массиве, а затем записать его в фактический массив, когда построение будет завершено без блокировки и блокировки?
swap()
, чтобы поставить его на место после завершения. Это не атомарно, и поэтому потребуется блокировка на время операции подкачки, но это относительно быстрая операция, поэтому ваш массив не будет заблокирован очень долго, и это безопасно. (Что касается вашего вопроса, я лично не знаю, как сделать то, что вы просите, на С++ без блокировки/блокировки.) - person Turix   schedule 11.03.2013swap()
согласно моему предыдущему комментарию, кстати.) - person Turix   schedule 11.03.2013