- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
volatile bool b;
class BoolKeeper
{
bool &fb;
public:
BoolKeeper(bool &b)
{
while (b);
b = true;
}
~BoolKeeper ()
{
b = false;
}
}
void Thread1
{
BoolKeeper ololo(b);
// что-то делаем
}
void Thread2
{
// что-то делаем
BoolKeeper ololo(b);
// что-то делаем, причём в этом месте нам важен факт, что Thread1 не выполняется
}
LispGovno 13.01.2013 22:45 # −1
http://www.youtube.com/watch?v=byzGCPwtZM0
tirinox 13.01.2013 23:11 # +2
bormand 13.01.2013 22:56 # +5
volatile, емнип, сохраняют порядок только среди других volatile, но ничего не гарантируют для не volatile обращений, которые могут разползтись и до и после этого спинлока...
Да и барьеров, насколько я понимаю, обращение к volatile переменной не генерирует, со всеми вытекающими последствиями... Это я к чему - а к тому, что нет гарантии того, что переменные, модифицированные перед BoolKeeper в Thread1 высрутся из кеша текущего ядра в память, и нет гарантии того, что Thread2 после прохода через BoolKeeper будет читать эти значения из памяти, а не из кеша своего ядра. В результате кровь-кишки-распидорасило получим забавные и трудноуловимые гейзенбаги...
bormand 13.01.2013 23:02 # +3
LispGovno 13.01.2013 23:12 # 0
Даю гарантю, что не генерирует.
bormand 13.01.2013 23:33 # 0
LispGovno 14.01.2013 00:06 # +1
А вот джаваба или сишарпик сделает.
А то что ты написал - противоречит кодексу С++: 100500 заряженных ружий ради оптимизации не платишь за то, что не используешь.
LispGovno 14.01.2013 00:13 # +1
>Double-checked locking can be implemented in Visual C++ 2005 and above if the pointer to the resource is declared with the C++ keyword volatile. Visual C++ 2005 guarantees that volatile variables will behave as fence instructions, as in J2SE 5.0
http://en.wikipedia.org/wiki/Double-checked_locking
bormand 14.01.2013 00:26 # +2
LispGovno 14.01.2013 00:46 # 0
bormand 14.01.2013 00:55 # +1
> для прерываниеёбства
Ну и для сигналоёбства в никсах. Но к визуалке оба пункта слабо относятся.
LispGovno 14.01.2013 01:03 # 0
В визуалке я тебе даже загрузочный сектор могу написать. А дальше можно уйти и в портоебство и в прыжкоебство и в прерываниебство. Но с сигналами по сути засада...
bormand 14.01.2013 01:06 # +2
Она умеет 16 битные си или хотя бы 16битный инлайн асм? Или придется заниматься dbёбством до самого перехода в защищенный режим?
LispGovno 14.01.2013 01:29 # 0
Вырезаешь утилитами ненужный мусор и ими же релокейтишь на нужный адрес, подходящий для загрузочного сектора точку входа. По сути будет COM-программа. В ней будут всякие edi вместо di, но это все теже обращения в рамках одного сегмента реального режима.
Дальше твой yoba-сектор загружает твою yoba-программу, где реализован crt по полной тобой или кем-то ещё и дальше можно упарываться полными возможностями крестов без ограничений. Единственное не знаю есть ли реализация доморощенных crt с поддержкой исключений и fpu, но думаю должны быть и такие.
bormand 14.01.2013 01:37 # +1
LispGovno 14.01.2013 01:38 # 0
bormand 14.01.2013 01:47 # +1
inkanus-gray 14.01.2013 02:59 # +3
С одной стороны, есть редко используемый «нереальный режим»: можно отобразить всё ОЗУ на виртуальное адресное пространство 1:1, переключиться в реальный режим... Вуаля! Инструкция mov ax, WORD PTR [esi] может адресовать 4 гигабайта.
С другой стороны, код из 32-битного сегмента может пользоваться инструкциями типа MOV eax, DWORD PRT [si], ограничивая себя 64 килобайтами, как в старые добрые времена.
Но вот беда: оба кода требуют префиксов адреса, т. е. нужна поддержка со стороны компилятора. Не патчить же код вручную, учитывая, что места для префикса может не найтись!
А что будет, если 32-битный код без префиксов посадить в реальный режим или 16-битный код без префиксов посадить в 32-битный сегмент? Барабанная дробь!
Комп распидорасило, пишу с утюга! А всё потому, что x86 придумали хитрожопые тролли, а поэтому один и тот же mod R/M в 16-битном режиме кодирует [BX+SI], а в 32-битном — [EAX]. Как думаете, сможет ли компилятор предугадать такой поворот событий?
Вот по этой причине в известных архивах Windows NT4/2000 source code отдельно лежит 16-битная версия Visual C.
Существует неофициальный генератор 16-битного кода для gcc для кросс-компиляции, но код он выдаёт ужасный.
bormand 14.01.2013 07:04 # +2
Декодирование mod r/m вполне управляется префиксом разрядности адреса, который 67h. Но один хрен визуалка эти префиксы расставлять не будет. Разве что в тулзе, нарезающей экзешник на полоски добавить расстановку префиксов и фиксап смещений в jmp'ах после этого...
inkanus-gray 14.01.2013 03:10 # 0
inkanus-gray 14.01.2013 03:05 # +2
А теперь мы со всем этим говном попытаемся взлететь.
bormand 14.01.2013 06:51 # +2
А еще визуалка, как и гцц, скорее всего любит заменять умножения и сложения на lea: Этот код скомпилится в 8D 44 80 05, который 16битный режим поймет как:
bormand 14.01.2013 06:56 # +2
Бутсектор на насме, утиль для кастрации экзешника, и 32-х битная тестовая прога на си, которая умеет крутить по таймеру палочку в углу экрана и показывать коды нажатых клавиш...
Если интересно - могу вечером выложить на гитхаб.
TarasB 13.01.2013 23:11 # −2
я король а вы сосете
иди ебись в глаза кракен
bormand 13.01.2013 23:17 # 0
tirinox 13.01.2013 23:22 # 0
bormand 13.01.2013 23:24 # 0
LispGovno 13.01.2013 23:27 # 0
http://liveworkspace.org/
bormand 13.01.2013 23:30 # +1
tirinox 13.01.2013 23:28 # 0
bormand 13.01.2013 23:28 # 0
P.P.S. volatile в IntKeeper можешь убрать, оно не имеет совершенно никакого отношения к многопоточности. Оно нужно для портоёбства.
TarasB 14.01.2013 13:19 # 0
bormand 14.01.2013 13:20 # +1
bormand 13.01.2013 23:45 # +3
Потоки - это такая злая вещь, в которой нельзя все баги отловить тестированием... Даже если все работает сейчас - не факт, что код корректен, и после года работы, при удачной фазе луны и присутствии рядом девственницы, не выдаст херню... Хорошим примером является паттерн double checked locking, который с первого, да и со второго, да и даже с третьего раза мало кто реализует корректно.
TarasB 14.01.2013 13:18 # −1
Да там везде в теории используется хуйня, которую я даже проверить не могу, потому что этих библиотек нет в мой студии, вот и приходится лепить из чего есть.
bormand 14.01.2013 13:31 # +1
Ну если хочешь запилить свой кроссплатформенный мутекс - сделай переключаемую дефайнами обертку для pthread под никсами, и для критической секции под виндой. Бустовский насколько помню так и запилен.
defecate-plusplus 14.01.2013 13:41 # +6
у него же селерон 10 летней выдержки
он еще небось апдейты не ставит, потому что "sp3 для xp - говнище!"
bormand 14.01.2013 17:06 # +1
roman-kashitsyn 14.01.2013 17:09 # +4
"Тарас скорее всего расстроится, т.к. студия требует фреймворк"
3.14159265 14.01.2013 17:10 # +2
>фреймворк 4.5 невозможно поставить на XP
Хороший повод отказаться от проприетарщины и пересесть на gcc.
А там глядь, и Тарас вовсе от ШИНДОШС откажется.
Я последний раз студию ставил лет 6 назад. Такого распухшего высера для быдлоынтырпрайза еще посикать. Сумневаюсь что они поувольняли всех индусов и VS 12 требует меньше ресурсов чем предшественники.
bormand 14.01.2013 17:16 # 0
А я всего лишь три-четыре года ее не видел. Давно уже gcc/vim/QtCreator/eclipse.
Просто хотел собрать свой древний проектик, про который писал выше, ну и заодно посмотреть чего там сейчас в свежих визуалках по юзабилити.
3.14159265 14.01.2013 17:25 # 0
Но как вспомню, сколько там качать и потом еще джва часа её ставить, то проще полезть и разобраться в сырцах, чем ставить это говно.
bormand 14.01.2013 17:31 # 0
defecate-plusplus 14.01.2013 17:21 # 0
небось еще все галочки поставил (да-да, я хочу и басик, и шарп, и сыкал сервер, и кристал репорц, и да-да, поставьте мне мсдн на локальный диск)?
если на машинах в офисе стоит винда, АД, офис, на кой черт искать убогие глючные, но "свободные" редакторы (дебаггер то под виндой есть у мингв? а в 2005 году?)
bormand 14.01.2013 17:25 # 0
Ну креатор дебажил, пока не начались пертурбации с нокией\троллями\дигией, и не поломали сдк к хуям. Сейчас там надо поплясать с бубном, чтобы gdb стартануло... А так быстро привыкаешь к хорошему - кутисдк, который качается и обновляется в пару кликов, да еще и работает...
roman-kashitsyn 14.01.2013 17:30 # +2
GNU Emacs, в отличие от XEmacs, очень стабильный редактор. Его можно месяцами не закрывать, юзая каждый день по 12 часов. Время запуска ~ секунда.
Крэша или некорректной работы Vim я никогда не наблюдал. Максимум - если натыкаешь по ошибке не туда, но это уже сам дурак. Месяцами не юзал, ибо запускается долисекунды.
Вот Eclipse - бажный отстой. Idea неплоха, но тоже частенько глючит и жрёт память.
А вот такого убожества, как 2008 студия для сишарпика я никогда не видел. Приходится использовать её с решарпером на не особо мощной машине. Крэшится в дебаге через раз. Отображает текст в два раза медленнее, чем я печатаю. Интерфейс контринтуитивен.
И конечно, все перечисленные IDE адски сливают "убогим и глючным свободным редакторам", когда дело доходит до работы с текстом, темплейтами и макросами, а не "сгенери мне ToString".
defecate-plusplus 14.01.2013 17:50 # 0
не прижилось
ассист с нормальным редактором и мышью заруливает эти мазохистские редакторы, в которых надо постоянно что-то настраивать, умение перейти из окна output с выводом компилятора в строку, где найдена ошибка - вообще событие,
а уж о том, чтобы предложить в качестве аргумента функции только те доступные имена, которые подходят по типу и действительно сочетаются - в vi это за пределами моих смелых фантазий
не исключаю, что он это таки умеет (быть может, только с последними достижениями от clang), а у меня просто кривые руки и программист мышкой головного мозга, но в 2005 году vim по удобству и интуитивности проигрывал даже фару с колорером
причем, по ssh мне конечно приходится читать/редактировать что-нибудь в vi, но поддерживать им проекты на 1млн строк - нет, спасибо
у 2008 студии тоже есть сервис паки/обновления, как и очевидно, в решарпере (не пользуюсь), и чтобы она в дебаге крашилась - может причина в сишарпе или отключенных обновлениях?
на моей старой слабой машине с мегаубогим хардом любая студия дико тормозила, факт
roman-kashitsyn 14.01.2013 18:01 # 0
С другой стороны, написать плагин для vc/eclipse/idea - задача не из лёгких, и я вряд ли решусь когда-нибудь на такой шаг.
Для "убогого" же emacs это обычно делается довольно просто (при наличии минимальных знаний elisp).
И, конечно, вкладки - отстой, буфера и окна рулят. А список *кликабельных* ошибок компиляции в емаксе легко получается по M-x compile/recompile, который привязывается к любимому сочетанию клавиш
Abbath 15.01.2013 13:30 # 0
roman-kashitsyn 15.01.2013 13:34 # 0
Abbath 15.01.2013 15:00 # 0
bormand 15.01.2013 13:34 # 0
>> И, конечно, вкладки - отстой
Вывод: вим - отстой.
Abbath 15.01.2013 15:01 # 0
absolut 15.01.2013 15:32 # +2
3.14159265 14.01.2013 18:25 # 0
Да. Вообще я долгое время сидел на древней VS6. Говно, знаю. Но привык к нему. Та студия не требовала гигафлопсов CPU и гигабайтов RAM.
05 поставил ради нового сишарпика - посмотреть чего там. Полтора часа установки меня насторожили.
>и сыкал сервер, и кристал репорц
Ну уж нет.
>дебаггер то под виндой есть у мингв
имхо, дебагеры не нужны.
>Вот Eclipse - бажный отстой. Idea неплоха, но тоже частенько глючит и жрёт память.
>А вот такого убожества, как 2008 студия для сишарпика я никогда не видел.
Согласен на 100%.
TarasB 14.01.2013 18:39 # 0
defecate-plusplus 14.01.2013 21:18 # +1
без дебаггера одним трейсом в лог на отладку (поиск гейзенбага) времени уходит больше, чем с дебаггером
3.14159265 14.01.2013 22:24 # +2
Да дебажить такое сущий ад. Не пойму что тут облегчит дебагер? Он не спасет тебя от той лютой хуйни, что в ОП-посте.
Обычно вдумчивое всматривание в код и медитация над ним, которая со временем открывает его незримую суть приносят больше пользы.
Важнее того вдумчивое и осторожное написание многопоточного кода, а не изобретение кривых велосипедов, как это делает Тарас.
defecate-plusplus 14.01.2013 22:42 # 0
но, откровенно говоря, доводится этим заниматься нечасто
scriptin 17.01.2013 16:10 # 0
Интегрированный отладчик и подсветку ошибок в коде тоже было бы неплохо иметь.
Плюс дополнительная проблема - мне нужно писать на PHP, поэтому желательно иметь IDE под оба языка. Я рассматривал вариант emacs + ensime, но в emacs, говорят, проблемы с мультирежимами, а мне часто приходится поддерживать лапшу из PHP+SQL+HTML+CSS+JavaScript.
В итоге сейчас сижу на Eclipse. Поддержка Scala весьма хорошая (подсветка ошибок, полное автодополение, рефакторинги, брейкпоинты), но "микроредактирование" текста не такое удобное и некоторых плагинов vim'а очень не хватает. И еще очень раздражает, что все делается через тучу менюшек вместо одного файла конфигурации. *плак-плак*
roman-kashitsyn 17.01.2013 16:24 # +2
Вот это http://scala-ide.org я тоже пробовал, но оно, хоть и поделка typesafe, совсем не впечатлило. Код иногда понимает чуть лучше, чем Idea, но когда дело доходит до рефакторинга, оно портит код. Во всяком случае, версия 2.0 портила. На в целом терпимо. Правда, тормознутость Eclipse отбивает любое желание этим пользоваться.
Ensime + Emacs тоже пробовал, в целом впечатлил объём работы, проведённый автором. Многое работало, включая дополнение кода и поиск. Правдо, отжирало много памяти и иногда Ensime крэшил емакс.
php редактирую в основном под страхом смерти. При работе с практически любым языком предпочитаю использовать или писать билдеры разметки/запросов, позволяющие минимизировать кол-во языков, одновременно использующихся в каждом конкретном исходнике.
scriptin 17.01.2013 16:34 # 0
TarasB 14.01.2013 13:42 # −1
roman-kashitsyn 14.01.2013 13:49 # +4
TarasB 14.01.2013 13:52 # +1
bormand 14.01.2013 13:54 # +1
Отладчик для настоящего хакера.
govnomonad 14.01.2013 15:23 # +1
roman-kashitsyn 14.01.2013 15:35 # 0
roman-kashitsyn 14.01.2013 14:09 # +1
bormand 14.01.2013 13:53 # +4
Легким движением руки я добавляю ключ -std=c++98 или -std=c89, и все лишние свистоперделки испаряются, остается только сила древних...
TarasB 14.01.2013 14:11 # 0
bormand 14.01.2013 14:17 # 0
TarasB 14.01.2013 14:28 # 0
bormand 14.01.2013 15:08 # +1
Реакция при вводе текста должна быть точно такой же. Автодополнение скорее всего такое же или быстрее, ну не будут же делать в новых версиях более медленный intellisence... Хотя тут надо проверить, это же мс, с них станется испортить его.
А фишки среды, скрытые в менюшках, типа интеграции с системами контроля версий, рефакторингом и анализом совсем не мешают, пока ты их не запустишь.
defecate-plusplus 14.01.2013 16:44 # +1
я дома пробовал vs2012, не релизную еще, там заметно тормозил ввод текста
плюс этот самый ввод выглядел убого с какими то дополнительными мусорными перемигиваниями, подсвечивания строки курсора и т.д.
а дома 12Гб памяти, например
bormand 14.01.2013 16:47 # 0
defecate-plusplus 14.01.2013 16:51 # +2
а для всего остального есть мастеркард ливвёркспэйс
absolut 14.01.2013 16:51 # +2
в релизной вроде бы всё плавно, ещё и рефакторинг для С++ добавили.
absolut 14.01.2013 16:52 # 0
absolut 14.01.2013 16:53 # 0
bormand 14.01.2013 16:54 # 0
absolut 14.01.2013 17:07 # +2
defecate-plusplus 14.01.2013 17:02 # +1
absolut 14.01.2013 17:08 # +3
p.s. планки можно было с и манибеком взять (типа тоже посмотреть)
defecate-plusplus 14.01.2013 17:12 # 0
в отличие от мастарр калекшен или студио ултимейт рахитект тим лид едишан
absolut 14.01.2013 17:16 # 0
roman-kashitsyn 14.01.2013 18:59 # 0
absolut 14.01.2013 19:45 # +1
defecate-plusplus 14.01.2013 20:06 # +4
eth0 14.01.2013 19:19 # 0
3.14159265 14.01.2013 19:32 # 0
http://cache2.allpostersimages.com/p/LRG/51/5103/Z6DEG00Z/posters/zombie-brains.jpg
defecate-plusplus 14.01.2013 20:09 # 0
когда равы весят по 30 метров, и в коллекции их надо пару сотен обработать
Abbath 15.01.2013 13:42 # 0
defecate-plusplus 15.01.2013 13:53 # 0
Abbath 15.01.2013 15:06 # 0
eth0 15.01.2013 17:23 # 0
В таких объёмах да, конечно, сожрёт и не подавится.
Но в более приземлённой области не встречал. Не для простого это пользователя.
Abbath 15.01.2013 13:38 # +2
govnomonad 15.01.2013 16:53 # +2
absolut 14.01.2013 16:11 # 0
а что не держит? 4.7.2?
bormand 14.01.2013 16:16 # 0
http://gcc.gnu.org/projects/cxx0x.html
absolut 14.01.2013 16:22 # 0
p.s. какие неожиданности оказывается в фичах языка присутствуют "Minimal support for garbage collection and reachability-based leak detection".
defecate-plusplus 14.01.2013 13:57 # +2
bormand 14.01.2013 14:02 # +1
defecate-plusplus 14.01.2013 14:12 # 0
ради посмотреть можно с торрентов утянуть ultimate
absolut 14.01.2013 16:13 # +3
а ради поработать?
bormand 14.01.2013 16:18 # 0
P.S. Экспресс хочу потому что он легче, и в нем нет фич, ненужных для беглого осмотра экспоната.
absolut 14.01.2013 16:31 # +3
inkanus-gray 14.01.2013 16:57 # +2
bormand 14.01.2013 17:07 # 0
absolut 14.01.2013 17:11 # 0
bormand 14.01.2013 17:17 # +3
TarasB 14.01.2013 14:11 # +1
мне даже наоборот, чем хуже оптимизация под винду, тем лучше я буду видеть, где что будет на планшете
absolut 14.01.2013 16:10 # +1
кушай шоколад "воздушный"
absolut 14.01.2013 17:33 # +1
3.14159265 14.01.2013 17:38 # +1
промахнулся
absolut 14.01.2013 17:50 # +1
LispGovno 15.01.2013 22:53 # 0
Ccik 15.01.2013 16:59 # 0
bormand 15.01.2013 21:03 # +2
LispGovno 15.01.2013 22:06 # 0
Не пугай гостя странными словами.
bormand 15.01.2013 22:48 # 0
LispGovno 15.01.2013 22:52 # +3
bormand 15.01.2013 22:58 # +1
TarasB 16.01.2013 09:54 # +2
LispGovno 14.01.2013 01:32 # 0
TarasB 14.01.2013 12:59 # +3
LispGovno 14.01.2013 13:06 # −2
TarasB 14.01.2013 13:17 # +3
3.14159265 14.01.2013 17:31 # +5
Слышало гумно, да не знает кто хочет подзалупного творожка отведать?
Хотя на мой вкус орлежка гораздо сочнее был.
TarasB 14.01.2013 18:41 # +3
anonimb84a2f6fd141 14.01.2013 19:37 # +1
TarasB 14.01.2013 20:29 # 0
tirinox 13.01.2013 23:25 # +2
bormand 13.01.2013 23:32 # +3
tirinox 14.01.2013 00:15 # +3
3.14159265 14.01.2013 22:42 # +6
Как и предсказывал defecate-plusplus
>возможно, когда-нибудь ты отвыкнешь от глобальных переменных и однопоточности
здесь http://govnokod.ru/11975#comment156837
Тарас начал изучать многопоточное программирование.
Как и подобает Тарасу он сказал "Нахуй стандартные языковые средства, я буду писать свои костыли".
После чего дискуссия пошла в сторону ide и отладчиков.
Проблема, повторюсь, решается не дебаггером и иде. Как раз они вас не спасут.
Проблема решается в корне: тем что просто не надо писать такие самокаты. А начать с того что изучить хотя бы одну книжку или десяток статей по теме.
PS> так мало того. еще на геймдеве насрали 38 страниц, пытаясь сделать из говна мьютекс. лень даже тратить время на прочтение.
bormand 14.01.2013 22:55 # 0
Ну, кстати, уже на третьей странице Тарас запостил работоспособную версию своего мутекса через __sync_add_and_fetch. На глаз в ней не видно явных багов и расовых условий, хотя и смотрится она кривовато.
LispGovno 15.01.2013 06:31 # +3
bormand 15.01.2013 06:48 # +1
Ок, согласен. Настоящий мутекс без ядерной поддержки он все равно не запилит.
absolut 15.01.2013 07:01 # +3
LispGovno 15.01.2013 07:10 # 0
В ядерных спинлоках настоящих - сначало идет спинирование, а потом уход в ожидание события.
В случае если ядро одно, то сразу уход в ожидание событие.
TarasB 15.01.2013 09:20 # +1
Да, и наоборот. Мне там надо пару переменных-то лишь поменять (новые размеры буфера выставить), ради этого я буду лезть в ядро за мутексом? Нет, я лучше в цикле пару кругов намотаю.
bormand 15.01.2013 10:39 # +1
Зачем так сделано? А тупо потому, что если за 10-15 тактов мутекс не отпустили, то скорее всего и не отпустят, и лучше уйти поспать. А для "поменять пару переменных" оно как раз будет работать как твой спинлок.
Если я конечно не туплю.
3.14159265 15.01.2013 14:51 # +2
Но, поверь, там достаточно веревки чтобы выстрелить куда надо. Это, наверное, один из самых сложных способов писать многопоточный код. И то что в CASе не может быть дедлоков - миф.
TarasB 15.01.2013 14:59 # +1
3.14159265 15.01.2013 15:04 # +2
Именно твоё __sync_ololo:
__sync_val_compare_and_swap
bormand 15.01.2013 17:00 # +1
TarasB 16.01.2013 09:55 # 0
bormand 16.01.2013 10:16 # 0
А вот расовое условие и проблему АБА словить можно только так. Может быть 3.14159265 их и имел в виду?
TarasB 16.01.2013 10:35 # 0
LispGovno 16.01.2013 10:50 # +1
Достаточно 2 потока (или более, что ещё хуже) непрерывно касирующих одну переменную. Но время обработки данных у каждого потока разное. У одного много меньше, чем у другого. В результате один касирует редко, а второй часто. Так вот редко кассирующий попадает в дедлок, так как никак не может сохранить результат своих действий и продолжить работу, так как часто кассирующий постоянно меняет исходные данные.
Тоесть у касирующих алгоритмов есть следующая гарантия: хотябы один поток идет к прогрессу в расчетах, но нет гарантии, что данный конкретный поток хоть раз проведет успешный кас.
bormand 16.01.2013 11:36 # 0
А это имхо не дедлок, имхо, а starvation, когда одному потоку не дают поработать.
А дедлок он все-таки мертвый и неустранимый кроме как убийством одного из тредов.
P.S. А еще есть live-lock, когда два потока активно дрочат синхронизацию, но при этом ни один не может продвинуться дальше.
LispGovno 16.01.2013 12:17 # −1
Скорее это livelock. Только вот при использовании cas-алгоритмов - ты эту ситуацию никак урегулировать не можешь. Долгое время код работает нормально, а однажды это вылазит и приходится переписывать очень многое с lockfree на lockfull, так как переписыванием одно модуля понятное дело уже не обойдется (возможно даже весь проект переписать придется).
Урегулировать можно только в активные потоки вставлять слипы или критические секции, чтобы их утихомирить, но это сразу минус в эффективности и простоты управления
bormand 16.01.2013 14:48 # 0
P.S. На самом деле такое CASодрочево возникнет только в одном случае - если один из потоков только и делает, что лезет к этой расшаренной структуре. Если же между операциями над структурой они занимаются какой-то достаточно долгой полезной работой - starvation маловероятен.
P.P.S. А схема с постоянным дрочевом одного и того же места в одной расшаренной структуре - это уже первый шаг к херовой производительности, и тут ни lock free ни lockful не спасут.
LispGovno 16.01.2013 16:31 # 0
Я знаю определения этого термина, но ближе всего к нему, если искать среди *lock'ов:
> Скорее это livelock.
Но это не важно. Можно назвать голоданием.
LispGovno 16.01.2013 16:36 # 0
Не в этом дело. Если все потоки занимаются достаточно долгой полезной работой, но период длительности обработки данных из одной и той же структуры разными потоками всегда стабильно отличается более чем в 2 раза, то происходит это самое голодание более slow потока. Это оновы concurrence
LispGovno 16.01.2013 16:39 # 0
А что поделать? Зачастую именно такие места заменяют на локфри, так как производительности критических секций уже не хватает.
LispGovno 16.01.2013 12:22 # −2
Устраняется легко без убийства. Анализ кода. Или throw или возврат локошибки из ожидания примитива. Только обработчики под эту ситуацию придется писать. Благо алгоритмы обнаружения возможности дедлоков известны и проработаны.
3.14159265 16.01.2013 18:00 # +2
Да-да. Гумно правильно сказал. Именно это имелось ввиду. Когда тредов несколько это не так критично.
Но когда их несколько десятков CAS начинает сливать лочкам, потому что они начинают друг другу мешать и больше процессорного времени каждого тратится на повторения в цикле. Получается эффект переполненного метро (или банки с огурцами), когда никто не может вылезти из вагона, потому что мешают соседи.
В то время как мьютекс заставляет их высторится в очередь и ждать.
LispGovno 16.01.2013 11:00 # −1
Хотя есть одна RC на самом деле и в касах. Удаление все ещё используемого элемента. В C# и Java этой проблемы нет, ибо сборщик мусора решае 1)и ABA 2)и RC при удалении памяти, используемой в другом потоке. Так что С++ для lockfree-алгоритмов уныл, так как требует ещё большей внимательности и концентрации при разработке, чем обычо
bormand 16.01.2013 12:23 # +2
CAS'ы дорогие, поэтому любой уважающий себя алгоритм старается юзать минимально возможное количество CAS'ов. А от этого до race condition всего один шаг.
LispGovno 16.01.2013 16:41 # +1
3.14159265 16.01.2013 18:07 # +2
Да вроде ты всё верно говоришь. Хотя и в GC-языках я наступал на ABA с nullами. Не до конца подумав пытался секономить на пустых объектах - выстрелил себе в ногу.
Ибо CAS не видит разницы между nullами, а вот пустые объекты затратно, но безопастно.
В не GC надо организовать пул таких объектов - больше работы, но и выше производительность, потому берешь из пула, а не делаешь malloc & free.
>CAS'ы дорогие
ЛолШто? Наоборот, при низкой конкуренции CAS быстрее лочки, ибо он поддерживается на уровне железа.
bormand 16.01.2013 19:10 # 0
По сравнению с обычными не атомарными командами же, не по сравнению с лочкой.
3.14159265 16.01.2013 19:43 # +1
А. Ну это черезчур очевидно.
Скажем по стоимости и соответственно силе они идут так:
no sync<volatile<atomic(CAS)<lock(mutex)
TarasB 15.01.2013 09:18 # −1
Блядь, из-за гуглопидоров мне ещё и 10 статей читать, причём ещё и небось на английском? Не проще ли нагуглить функцию __sync_ololo_and_trololo, написать велосипед, запостить на пару сайтиков и отладить по комментам? Не кажется ли, что код из 10 строчек с непредсказуемыми эффектами как раз таки именно по комментам отлаживать и надо?
defecate-plusplus 15.01.2013 09:25 # +6
ты ведь понимаешь, что по тебе рисуют образ "типичный дельфи-программист"? какой пример ты подаешь молодёжи?
TarasB 15.01.2013 09:39 # −4
Если фреймворк требует от меня чтения поебени, дохуя далёкой от темы фреймворка, то этот фреймворк - говно.
Если эти пидоры из гугла умудрились сделать колбека в отдельном потоке, заставляя пользователя учить потоки, то это просто лютый бешеный пиздец, впрочем, про НДК и так все знают, что это так.
roman-kashitsyn 15.01.2013 10:10 # +4
TarasB 15.01.2013 10:15 # 0
roman-kashitsyn 15.01.2013 10:21 # −1
Но, к сожалению, они обычно медленней многопоточности и хуже масштабируются. Доступные машины с сотней-другой ядер (пока на видеокартах) уже есть. Товарищи из Tilera творят невероятные вещи, хоть их разработки пока довольно дороги.
По мне, самый удобный механизм работы с конкурентностью - акторы. Кстати, стейт-машины отлично на них ложаться.
TarasB 15.01.2013 10:22 # 0
На 1 ядре - очевидно нет.
roman-kashitsyn 15.01.2013 10:30 # +6
Да и GUI для ресурсоёмких задач программировать без многопоточности - садизм.
bormand 15.01.2013 10:50 # +2
И в то же время программировать гуй с многопоточностью - мазохизм.
Abbath 15.01.2013 14:27 # 0
roman-kashitsyn 15.01.2013 14:34 # +1
absolut 15.01.2013 15:35 # +5
LispGovno 15.01.2013 14:44 # −1
А что они делают?
LispGovno 15.01.2013 17:02 # −1
roman-kashitsyn 15.01.2013 17:04 # +1
absolut 15.01.2013 17:22 # 0
absolut 15.01.2013 10:27 # +4
defecate-plusplus 15.01.2013 10:41 # +1
примитивов межпоточной и межпроцессной синхронизации не так много
уверен на педивикии даже на русском есть
после того, как ты ознакомишься с полным списком, надо его отфильтровать по поддерживаемыми платформой и выбрать подходящий
я сейчас, по моему, очевидные вещи говорю, не благодари
TarasB 15.01.2013 10:42 # −1
defecate-plusplus 15.01.2013 10:50 # +1
пока ты не решаешь эффективно задачи reader/writer, частичной блокировки сложного объекта или рекурсии, её хватит
я тебе про буст уже говорил, по крайней мере BoolKeeper писать не пришлось бы
roman-kashitsyn 15.01.2013 10:48 # +7
3.14159265 06.02.2013 21:09 # +2
defecate-plusplus 07.02.2013 09:37 # +3
3.14159265 07.02.2013 16:53 # +2
3.14159265 15.01.2013 14:54 # +3
> запостить на пару сайтиков и отладить по комментам?
>Запостил: LispGovno,
Пиздец. И сильно тебе помогли на гкоде?
TarasB 15.01.2013 14:58 # 0
По-моему, КПД неплохой.
absolut 15.01.2013 15:37 # +6
TarasB 15.01.2013 17:55 # +1
Когда говно сдают на анализ в поликлинику, то заранее знают, что это говно и ищут только следы болезней.
А когда говно выкладывают на форум, то слово "говно" получается в переносном смысле и вопрос состоит не в нахождении симптомов полезней в этом "говне", а в вопросе о том, говно ли это вообще. Обычно этот тонкий нюанс не имеет роли, но именно в твоём случае он - самый важный. Поэтому твоё утверждение, применительно к коду, неверное.
LispGovno 15.01.2013 19:25 # +1
Найди себе уже девушку наконец, а не виси над аналогиями
TarasB 15.01.2013 19:46 # −3
defecate-plusplus 15.01.2013 19:28 # +1
LispGovno 16.01.2013 22:46 # 0
Каким образом можно применить std::move_if_noexcept?
http://en.cppreference.com/w/cpp/utility/move_if_noexcept
defecate-plusplus 16.01.2013 23:00 # +3
применять натощак, когда в твоем методе, а еще лучше, конструкторе, требуется гарантия, что move ничего не выкинет
даже по твоей ссылке это написано - используется вектором при ресайзе (расшифровываю - вектору хотелось бы знать, выкинет ли элемент исключение при перетаскивании его из старого буфера в новый, и если он на такое способен, то вектор от греха подальше будет пользоваться копированием всех существующих элементов в новый буфер, и лишь когда они скопируются нормально, поудаляет их в старом,
ну а если мув элементов обещает вести себя хорошо, то вектор их сразу будет мувом перемещать)
LispGovno 15.01.2013 19:28 # +2
> По-моему, КПД неплохой.
Лучше бы ты пару статей прочитал и уже бы написал годный код, чем 4 дня висеть целый день на говнокоде и говнодеве и слушать инфу о том кто же все-таки ты такой на самом деле.
TarasB 15.01.2013 19:45 # −8
А на говнокод несколько раз за день зашёл на несколько минут, почитал комменты, всё понял, ушёл.
bormand 15.01.2013 21:05 # +5
Читай больше английских текстов, и будет тебе счастье.
P.S. Последнее время разочаровался в статьях на русском. Обычно или переводчик надмозг (хоть и врубается в тему), и читать в оригинале намного легче, либо переводчик нихера не понимает в теме, и переводит текст как литературный.
absolut 15.01.2013 21:37 # +1
3.14159265 15.01.2013 21:58 # +3
> читать в оригинале намного легче
Верной дорогой! Когда-то и мне это казалось извратом - "чтение в оригинале, фу". Прикол в том что и индус, и болгарин, и китаец, и русский, и француз, и немец - все худо-бедно поймут сраный инглиш. И потому смогут ужится на одном форуме.
Да и огромное количество полезной инфы (спецификации, стандарты, документация, статьи), которую никто не собирается переводить именно на англицком.
Хороший, простой, доступный Тарасу пример: документация на сайте MS.
guest 15.01.2013 22:20 # +1
LispGovno 15.01.2013 22:48 # +1
ps: Борманд ниже тоже цвет не разглядел.
bormand 15.01.2013 22:39 # 0
Как ни попаду на сайт мс из гугла - так мне подсовывают быдломашинный перевод, который невозможно читать, а ссылку на оригинал каждый раз забываю где искать...
TarasB 16.01.2013 09:57 # 0
3.14159265 16.01.2013 20:42 # +1
Ок. Ты сам на каком языке его читаешь?
> там тупо тенический текст
А статьи/книжки по многопоточности не тенический текст получается?
"волатиле", "ЦАС", "атомис", "лоск", "мутех"
>Плохой! Ужасный пример!
Что не так?
anonimb84a2f6fd141 16.01.2013 22:06 # +3
язык, на котором написана документация PSDK у MS
поэтому и китаец и якут и даже Тарас все прекрасно понимают
bormand 17.01.2013 06:05 # 0
Потому что "Как ни попаду на сайт мс из гугла - так мне подсовывают быдломашинный перевод, который невозможно читать, а ссылку на оригинал каждый раз забываю где искать..."
UPD: Хм, зашел сейчас - вверху болтается радиобокс - перевод/оригинал. Ну уже прогресс, юзать можно.
absolut 17.01.2013 07:28 # 0
Помню были разные варианты представления страницы, но возможность выбрать оригинал была всегда. Сменой страны на сайте например
bormand 17.01.2013 07:55 # −1
absolut 17.01.2013 08:00 # +3
3.14159265 17.01.2013 15:16 # +1
fixed
eth0 17.01.2013 17:57 # +2
roman-kashitsyn 15.01.2013 23:59 # +4
На работе пытаюсь внедрять инглиш хотябы в комменты и документацию, хотя бы в проекты, за которые отвечаю я.
Думаю вот ещё уютненький бложик завести где-нибудь не пьянсва окаянного ради, практики инглиша для
bormand 16.01.2013 05:32 # +1
LispGovno 16.01.2013 11:06 # +1
Как то сами смыслы предложений всплывают на русском без каких либо усилий с моей стороны.
Ежели меня попросить перевести текст дословно, переводя каждое слово - перегрев и зависание.
На инглише пишу как неграмотное быдлогопник, незнающее времен и склонений.
roman-kashitsyn 16.01.2013 11:59 # +2
Вот грамотно разговаривать на английском - это действительно сложно, даже когда значешь грамматику, но практики не хватает.