Size: a a a

2021 February 20

D

Dmitriy in supapro.cxx
Котеечко Пухнастиньке
то есть я просто могу сделать указатель на начало списка атомарным и это решит проблему?
Нет
источник

КП

Котеечко Пухнастиньк... in supapro.cxx
блин.
источник

RB

Rustem B. in supapro.cxx
Flower Surgeon
Для рисования окошек в Linux нужен GUI-фреймворк, например wxWidgets, GTK или Qt. Последнее в освоении проще всего.
Проблематично будет выбрать тулкит
Либо написать хеддер под каждый тулкит
источник

s

std::slavik in supapro.cxx
Котеечко Пухнастиньке
то есть я просто могу сделать указатель на начало списка атомарным и это решит проблему?
ну типа
источник

s

std::slavik in supapro.cxx
можно например блочить все мьютексом
источник

s

std::slavik in supapro.cxx
всю работу с памятью
источник

s

std::slavik in supapro.cxx
а можно типа блочить только момент переключения указателя
источник

s

std::slavik in supapro.cxx
но это не всегда можно
скажем - если у нас один писатель и один читатель
или один писатель и много читателей
источник

s

std::slavik in supapro.cxx
нам не обязательно при добавлении нового объекта список блокировать все пока мы в память данные объекта пишем
главное - атомарно переключить указатель
источник

s

std::slavik in supapro.cxx
это типа неблокирующая (почти) очередь например
источник

s

std::slavik in supapro.cxx
но такое не всегда можно сделать - поэтому в общем случае блокируется все мьютексом
источник

D

Dmitriy in supapro.cxx
std::slavik
нам не обязательно при добавлении нового объекта список блокировать все пока мы в память данные объекта пишем
главное - атомарно переключить указатель
Нужно сделать CAS для как минимум 2 указателей)
источник

D

Dmitriy in supapro.cxx
И то, это будет очередь на списке, а не список
источник

s

std::slavik in supapro.cxx
в плане современных процессоров у которых есть несколько уровней кэша есть еще проблема при работе с общей переменной из разных потоков на разных ядрах
источник

D

Dmitriy in supapro.cxx
Перемещаться по списку без мьютекса чревато
источник

s

std::slavik in supapro.cxx
изменения которые один поток сделал с переменной - не сразу доезжают до памяти
источник

s

std::slavik in supapro.cxx
так что другой поток который на другом ядре выполняется - может работать с не актуальной уже переменной из кэша
источник

s

std::slavik in supapro.cxx
тут атомики пробрасывают изменения через кэши гарантируя  что изменения эти доедут до всех
источник

s

std::slavik in supapro.cxx
короче - атомики и неблокирующие всякие структуры стоит делать когда четко понимаешь что ты делаешь
источник

s

std::slavik in supapro.cxx
(ну и стоит таки посмотреть лекцию Пикуса которую я скидывал)
источник