A klasszikus Linux/POSIX C megoldasokon kivul csak a konnyedebb, beagyazott renszerekre, mikrokontrollerekre keszitett multithreading library-kat meg az ahhoz kapcsolodo dolgokat ismerem valamennyire. De ezutobbi dolgokban az az erdekes hogy mar egy par kilobyte-os kernellel meg hozza kapcsolodo API-val kapcsolatosan is megjelennek azok a problemakorok amik a nagy renszerek eseten is. Pl hogy mikor jobb spinlock-ot vagy mikor jobb szemafort/mutexet hasznalni, mennyire fugghet ez attol hogy milyen jellegu a krtikus szakasz amit vedeni kell (azaz csak szamolgatos vagy van-e benne potencialis I/O, vagy I/O tranzakcio), miket erdemes hasznalni privilegizalt illetve user-mode esetekben, mar itt elojonnek a kulonbsegek szemaforok meg mutexek kozott, mikor lehet megsporolni az atomi muveteket, mifele problemak jonnek be ha multi-core rendszerek is vannak, stb.
Szoval tenyleg erdekes lehet hogy mas nyelvek hogyan es/vagy milyen nyelvi elemekkel operalniak, mert a megoldando alapproblemak viszont kb hasonlo jelleguek :) Pl pont a Java-nal ezeket alig ismerem.
Szerk: pl C-ben jo lenne egy ilyen nyelvi elem:
int some_lock(int x)
{
printf("Enter lock %d\n",x);
/* do_lock(x); */
return(0);
}
int some_unlock(int x)
{
/* do_unlock(x); */
printf("Leave lock %d\n",x);
return(0);
}
#define some_critical(x) for ( int __i=({ some_lock(x);0; }); __i==1 ? ({ some_unlock(x); 0; }) : 1; __i++ )
int main(int argc,char *argv[])
{
int x;
x=7;
some_critical(x)
{ int __i;
__i=3;
(void)__i;
printf("something interesting.\n");
}
return(0);
}
Es akkor a do_lock/do_unlock lehetne minden a cli/sei-tol kezdve a spinlock-on keresztul a mutexekig barmi... ahol persze x az valami some_lock_t;