История изменений
Исправление alysnix, (текущая версия) :
CAS + atomics + memory barriers.
треды-то тут где? единицей исполнения в многопотоке(он потому и называется многопоток) является тред. то есть поток.
барьеры - это необходимый костыль, возникший в силу спекулятивного исполнения и переупорядочивания команд. если б не было переупорядочивания - не нужны были б и барьеры. и проц совершенно не обязан этим заниматься(и компилятор тоже)
мы ж говорим об абстракциях на языке высокого уровня, а не о конкретном железе. то есть барьер не является универсальной абстракцией и к тредам не имеет отношения, он имеет отношение к реализации переключения контекста тредов на конкретной архитектуре.
атомики - это очень частный случай(с формальной точки зрения) нерекурсивного мьютекса, реализованный аппартно, и им произвольный блок кода не защитишь. то есть на всеобщность он тоже не претендует.
cas(compare and swap??) - частный случай атомарной операции.
что вообще можно на этом программировать?
тред это поток исполнения, со своим стеком, то есть контекстом исполнения, способный встать в ожидание некоего события. где тут тред?, почему он должен думать о каких-от барьерах,… хотя атомарные операции никто не отвергает, но они являются лишь более эффективным дополнением к тому набору, что я сказал.
кстати, с помощью перечисленных вами базовых абстракций нельзя реализовать модель тредов. потому что упущена еще одна «абстракция» - механизм прерываний. потому что, чтобы защитить код на совсем нижнем уровне - атомиков и барьеров недостаточно. нужно еще и управлять прерываниями.
Исправление alysnix, :
CAS + atomics + memory barriers.
треды-то тут где? единицей исполнения в многопотоке(он потому и называется многопоток) является тред. то есть поток.
барьеры - это необходимый костыль, возникший в силу спекулятивного исполнения и переупорядочивания команд. если б не было переупорядочивания - не нужны были б и барьеры. и проц совершенно не обязан этим заниматься(и компилятор тоже)
мы ж говорим об абстракциях на языке высокого уровня, а не о конкретном железе. то есть барьер не является универсальной абстракцией и к тредам не имеет отношения, он имеет отношение к реализации переключения контекста тредов на конкретной архитектуре.
атомики - это очень частный случай(с формальной точки зрения) нерекурсивного мьютекса, реализованный аппартно, и им произвольный блок кода не защитишь. то есть на всеобщность он тоже не претендует.
cas(compare and swap??) - частный случай атомарной операции.
что вообще можно на этом программировать?
тред это поток исполнения, со своим стеком, то есть контекстом исполнения, способный встать в ожидание некоего события. где тут тред?, почему он должен думать о каких-от барьерах,… хотя атомарные операции никто не отвергает, но они являются лишь более эффективным дополнением к тому набору, что я сказал.
Исправление alysnix, :
CAS + atomics + memory barriers.
треды-то тут где? единицей исполнения в многопотоке(он потому и называется многопоток) является тред. то есть поток.
барьеры - это необходимый костыль, возникший в силу спекулятивного исполнения и переупорядочивания команд. если б не было переупорядочивания - не нужны были б и барьеры. и проц совершенно не обязан этим заниматься.
мы ж говорим об абстракциях на языке высокого уровня, а не о конкретном железе. то есть барьер не является универсальной абстракцией и к тредам не имеет отношения, он имеет отношение к реализации переключения контекста тредов на конкретной архитектуре.
атомики - это очень частный случай(с формальной точки зрения) нерекурсивного мьютекса, реализованный аппартно, и им произвольный блок кода не защитишь. то есть на всеобщность он тоже не претендует.
cas(compare and swap??) - частный случай атомарной операции.
что вообще можно на этом программировать?
тред это поток исполнения, со своим стеком, то есть контекстом исполнения, способный встать в ожидание некоего события. где тут тред?, почему он должен думать о каких-от барьерах,… хотя атомарные операции никто не отвергает, но они являются лишь более эффективным дополнением к тому набору, что я сказал.
Исходная версия alysnix, :
CAS + atomics + memory barriers.
треды-то тут где? единицей исполнения в многопотоке(он потому и называется многопоток) является тред. то есть поток.
барьеры - это необходимый костыль, возникший в силу спекулятивного исполнения и переупорядочивания команд. если б не было переупорядочивания - не нужны были б и барьеры. и проц совершенно не обязан этим заниматься.
мы ж говорим об абстракциях на языке высокого уровня, а не о конкретном железе. то есть барьер не является универсальной абстракцией и к тредам не имеет отношения, он имеет отношение к реализации переключения контекста тредов на конкретной архитектуре.
атомики - это очень частный случай(с формальной точки зрения) нерекурсивного мьютекса, реализованный аппартно, и им произвольный блок кода не защитишь. то есть на всеобщность он тоже не претендует.
cas - частный случай атомарной операции.
что вообще можно на этом программировать?
тред это поток исполнения, со своим стеком, то есть контекстом исполнения, способный встать в ожидание некоего события. где тут тред?, почему он должен думать о каких-от барьерах,… хотя атомарные операции никто не отвергает, но они являются лишь более эффективным дополнением к тому набору, что я сказал.