( apal | 2024. 07. 25., cs – 09:39 )

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;