Как бы подразумевается, что как-то это условие сделать, и мьютекс становится lock-free. Хотя на самом деле единственный способ получить lock-free это выкинуть все мьютексы вообще.
вся затея со сведением мьютекса исключительно к спин-локам обречена на провал
Лучше было бы «вся затея с получением lock-free мьютекса», потому что сводить мьютекс к его реализации на спин-локах нам ничто не мешает, а заменять первые на вторые может даже оказаться полезно.
А, то есть вы хотели lock freedom описать. Только тогда стоит написать «провал операции» как более абстрактное, или вообще «хотя бы один поток выполнит операцию при любых действиях других потоков» — в вашем определении забыт случай с 1 потоком :-)
Касательно спинлоков — они тоже не lock-free. Вообще lock-free — это когда как минимум нет блокировок, т.е. ни мьютексов, ни спинлоков, ни семафоров.
Не совсем с теми же.
На системном семафоре у всех потоков 500000 +- 3000 сообщений. Практически поровну.
На вашем есть «удачливый» поток с 600000 сообщениями, и пара «неудачников» с 450000 — разница на треть.
«Любой провал спинлока означает, что другой поток успешно продвинулся» — точнее, другой поток получил лок. Это deadlock freedom, самое слабое условие алгоритмов с блокировками.
«если системный планировщик почему-то решит, что только один поток достоин получать процессорное время, то этому самому потоку ничего не должно помешать» — это obstruction freedom, самое слабое условие lock-free алгоритмов. Это условие, кстати, сильнее deadlock freedom.
Сведение мьютекса исключительно к спин-локам в теории проблем не вызывает, т.к. спин-лок — одна из возможных реализаций мьютекса. Редко когда эффективная, это да.
А собственно смысл lock-free не в том, что мы никогда не ждём. Он в том, что в алгоритме не должно быть критических секций. То есть мьютексов/спинлоков не должно быть в принципе.
У нас есть дополнительная информация — цвета шляп впередистоящих, сказанные стоящими сзади цвета и угадали ли они. Этого хватает, чтобы умер <= 1 человек.
Это была отсылка — «Вкалывают роботы, А не человек».
Но вообще для задачи технического обслуживания — «почини то, не знаю что» — вам потребуется интеллектуальная мобильная платформа, способная найти неисправность, сформулировать последовательность необходимых для починки действий и выполнить их. По-моему, вполне себе робот. Даже если не андроид.
На место архитектора 90-60 лет тому назад я себя предпочту не ставить, потому что тогда понятия об экологии и эргономике, которое сформулировано сейчас и на которое вы опираетесь — не было.
Не соглашусь, большое производство вам потребуется и дальше, просто для поддержания уровня.
Микросхемы деградируют — необходимо иметь заводик микросхем (предположим, что одного хватит на всё). Сюда же выращивание кремниевых булей, производство реагентов, добыча компонентов для реагентов, станкостроительное производство для запчастей станков и роботов, которые всё это обслуживают, отдельно производство солнечных панелей и аккумуляторов в масштабах, достаточных для питания всего вышеперечисленного, и уже набирается дофига всего.
Как бы подразумевается, что как-то это условие сделать, и мьютекс становится lock-free. Хотя на самом деле единственный способ получить lock-free это выкинуть все мьютексы вообще.
Лучше было бы «вся затея с получением lock-free мьютекса», потому что сводить мьютекс к его реализации на спин-локах нам ничто не мешает, а заменять первые на вторые может даже оказаться полезно.
Касательно спинлоков — они тоже не lock-free. Вообще lock-free — это когда как минимум нет блокировок, т.е. ни мьютексов, ни спинлоков, ни семафоров.
На системном семафоре у всех потоков 500000 +- 3000 сообщений. Практически поровну.
На вашем есть «удачливый» поток с 600000 сообщениями, и пара «неудачников» с 450000 — разница на треть.
«Любой провал спинлока означает, что другой поток успешно продвинулся» — точнее, другой поток получил лок. Это deadlock freedom, самое слабое условие алгоритмов с блокировками.
«если системный планировщик почему-то решит, что только один поток достоин получать процессорное время, то этому самому потоку ничего не должно помешать» — это obstruction freedom, самое слабое условие lock-free алгоритмов. Это условие, кстати, сильнее deadlock freedom.
Сведение мьютекса исключительно к спин-локам в теории проблем не вызывает, т.к. спин-лок — одна из возможных реализаций мьютекса. Редко когда эффективная, это да.
А собственно смысл lock-free не в том, что мы никогда не ждём. Он в том, что в алгоритме не должно быть критических секций. То есть мьютексов/спинлоков не должно быть в принципе.
Коммунистов (вполне себе религиозная группа) осуждать можно везде. Ну может кроме Китая.
Опоздал чуток (
Но вообще для задачи технического обслуживания — «почини то, не знаю что» — вам потребуется интеллектуальная мобильная платформа, способная найти неисправность, сформулировать последовательность необходимых для починки действий и выполнить их. По-моему, вполне себе робот. Даже если не андроид.
На место архитектора 90-60 лет тому назад я себя предпочту не ставить, потому что тогда понятия об экологии и эргономике, которое сформулировано сейчас и на которое вы опираетесь — не было.
Значит, вкалывать будут роботы. Следовательно, без микросхем никуда.
Микросхемы деградируют — необходимо иметь заводик микросхем (предположим, что одного хватит на всё). Сюда же выращивание кремниевых булей, производство реагентов, добыча компонентов для реагентов, станкостроительное производство для запчастей станков и роботов, которые всё это обслуживают, отдельно производство солнечных панелей и аккумуляторов в масштабах, достаточных для питания всего вышеперечисленного, и уже набирается дофига всего.
Электроника — лишь одна из них.
Или энергогенерация.
Или металлургия.
Как правило, в таких случаях просят результат по модулю большого простого, 10^9 + 7 например.