volatile notwendig?
-
richtig, auf unterschiedlichen cpus ist das ganze noch mal was anderes.
so weit habe da noch gar nicht gedacht, hätte ich vielleicht dazu schreiben sollen.auf einer cpu sollte es sich dann aber eher so wie bei einem interrupt verhalten, oder nicht?
ist doch auch asynchron.
-
@jenz: auf single-cpu, single-core, non-hyperthreading systemen wird normalerweise ein interrupt verwendet um zwischen verschiedenen threads umzuschalten.
garantieren tut dir das aber wohl auch keiner.der prozessor könnte selbst eine liste von threads verwalten, und zwischen denen beliebig, und zu beliebigen zeiten umschalten. die grenzen zu hyperthreading verschwimmen dann natürlich, aber der punkt ist ja gerade dass es kaum garantien gibt, und wenn, dann gelten die meist nur für eine bestimmte plattform.
oder ganz anders: die CPU könnte ja theoretisch auch verschiedene caches haben zwischen denen man umschalten kann. wenn thread 1 cache 1 verwendet und thread 2 cache 2, und diese caches im write back modus arbeiten, dann kann genau wie bei einem multi CPU system der fall auftreten dass thread 2 die änderungen von thread 1 nicht sieht.
das sind viele gründe die alle dafür sprechen dass im neuen standard endlich ein speichermodell festgelegt wird. und ich bin *sehr* froh dass es so aussieht als ob das mit C++09 endlich kommen wird. mit den geplanten atomic operations, threading support etc. alles standardisiert kann man sich dann endlich mal dran machen ordentliche libraries für threading in C++ zu schreiben. und mit solchen libraries, vorausgesetzt sie sind "gut" genug, könnte man einiges an geschwindigkeit rausholen. dann können sich diverse sprachen mit message-passing oder weiss-gott-was wieder brausen gehen
-
@jenz: auf single-cpu, single-core, non-hyperthreading systemen wird normalerweise ein interrupt verwendet um zwischen verschiedenen threads umzuschalten.
garantieren tut dir das aber wohl auch keiner.ich sehe nicht, dass unbedingt ein interrupt genommen werden muss.
ich sehe auch im standard nicht das wort interrupt so wie es auf maschinen funktioniert.da steht interrupting functions, das müssen keine interrupts sein.
oder ganz anders: die CPU könnte ja theoretisch auch verschiedene caches haben zwischen denen man umschalten kann. wenn thread 1 cache 1 verwendet und thread 2 cache 2, und diese caches im write back modus arbeiten, dann kann genau wie bei einem multi CPU system der fall auftreten dass thread 2 die änderungen von thread 1 nicht sieht.
das würde ich aber für ein sehr merkwürdiges cacheverhalten halten. gibt es soetwas wirklich?
und sind auf mehrcpu-systemen die caches wirklich unsynchronisiert?jenz
-
und sind auf mehrcpu-systemen die caches wirklich unsynchronisiert?
mehr oder weniger ja.
auf intel x86 sind sie "fast ganz synchron", auf powerpc schon weniger, ganz wild wirds mit alpha oder ähnlichem. gibt (bzw. gab) sogar systeme wo man die caches manuell flushen musste (spezieller ASM befehl).