LINUX.ORG.RU

История изменений

Исправление 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 - частный случай атомарной операции.

что вообще можно на этом программировать?

тред это поток исполнения, со своим стеком, то есть контекстом исполнения, способный встать в ожидание некоего события. где тут тред?, почему он должен думать о каких-от барьерах,… хотя атомарные операции никто не отвергает, но они являются лишь более эффективным дополнением к тому набору, что я сказал.