pthread_spin_init(3) Library Functions Manual pthread_spin_init(3) NUME pthread_spin_init, pthread_spin_destroy - iniializeaza sau distruge un blocaj de rotaie BIBLIOTECA Biblioteca de fire de execuie POSIX (libpthread, -lpthread) REZUMAT #include int pthread_spin_init(pthread_spinlock_t *lock, int pshared); int pthread_spin_destroy(pthread_spinlock_t *lock); Cerine pentru macrocomenzi de testare a caracteristicilor pentru glibc (consultai feature_test_macros(7)): pthread_spin_init(), pthread_spin_destroy(): _POSIX_C_SOURCE >= 200112L DESCRIERE Nota generala: Majoritatea programelor ar trebui sa utilizeze mutex-uri in loc de blocaje de rotaie. Blocajele rotative sunt utile in primul rand in combinaie cu politicile de planificare in timp real. A se vedea NOTE. Funcia pthread_spin_init() aloca toate resursele necesare pentru utilizarea blocarii prin rotaie la care face referire lock i iniializeaza blocarea pentru a fi in stare deblocata. Argumentul pshared trebuie sa aiba una dintre urmatoarele valori: PTHREAD_PROCESS_PRIVATE Blocajul de rotaie trebuie sa fie operat numai de fire din acelai proces ca i firul care apeleaza pthread_spin_init(); (incercarea de a impari blocajul de rotaie intre procese duce la un comportament nedefinit). PTHREAD_PROCESS_SHARED Blocajul de rotaie poate fi operat de orice fir din orice proces care are acces la memoria care conine blocajul (de exemplu, blocajul poate fi intr-un obiect de memorie partajata care este partajat intre mai multe procese). Apelarea pthread_spin_init() pe un blocaj de rotaie care a fost deja iniializat are ca rezultat un comportament nedefinit. Funcia pthread_spin_destroy() distruge un blocaj de rotaie iniializat anterior, eliberand toate resursele care au fost alocate pentru acel blocaj. Distrugerea unui blocaj de rotaie care nu a fost iniializat anterior sau distrugerea unui blocaj de rotaie in timp ce un alt fir de execuie deine blocajul are ca rezultat un comportament nedefinit. Odata ce un blocaj de rotaie a fost distrus, efectuarea oricarei operaii asupra blocajului in afara de iniializarea acestuia cu pthread_spin_init() duce la un comportament nedefinit. Rezultatul efectuarii unor operaii precum pthread_spin_lock(3), pthread_spin_unlock(3) i pthread_spin_destroy() pe copii ale obiectului la care se face referire prin lock este nedefinit. VALOAREA RETURNATA In caz de succes, aceste funcii returneaza zero. In caz de eec, acestea returneaza un numar de eroare. In cazul in care pthread_spin_init() eueaza, blocajul nu este iniializat. ERORI-IEIRE pthread_spin_init() poate eua cu urmatoarele erori: EAGAIN Sistemul nu dispune de resurse suficiente pentru a iniializa un nou blocaj de rotaie. ENOMEM Memorie insuficienta pentru a iniializa blocajul de rotire. STANDARDE POSIX.1-2008. ISTORIC glibc 2.2. POSIX.1-2001. Suportul pentru blocajele de rotaie partajate de proces este o opiune POSIX. Opiunea este acceptata in implementarea glibc. NOTE Blocajele de rotaie trebuie utilizate impreuna cu politicile de planificare in timp real (SCHED_FIFO sau, eventual, SCHED_RR). Utilizarea de blocaje de rotire cu politici de planificare nedeterministe, cum ar fi SCHED_OTHER, indica probabil o greeala de proiectare. Problema consta in faptul ca, daca un fir care funcioneaza in conformitate cu o astfel de politica este programat in afara CPU in timp ce deine un blocaj de rotire, atunci alte fire vor pierde timp cu rotirea pe blocaj pana cand deinatorul blocajului este reprogramat din nou i elibereaza blocajul. Daca firele de execuie creeaza o situaie de blocaj in timp ce utilizeaza blocaje de rotire, aceste fire de execuie se vor roti la nesfarit, consumand timp de procesor. Blocajele de rotaie din spaiul utilizatorului nu sunt aplicabile ca soluie generala de blocare. Acestea sunt, prin definiie, predispuse la inversarea prioritailor i la timpi de rotaie nelimitai. Un programator care utilizeaza blocaje de rotaie trebuie sa fie extrem de atent nu numai la cod, ci i in ceea ce privete configuraia sistemului, plasarea firelor i atribuirea prioritailor. CONSULTAI I pthread_mutex_init(3), pthread_mutex_lock(3), pthread_spin_lock(3), pthread_spin_unlock(3), pthreads(7) TRADUCERE Traducerea in limba romana a acestui manual a fost facuta de Remus- Gabriel Chelu Aceasta traducere este documentaie gratuita; citii Licena publica generala GNU Versiunea 3 sau o versiune ulterioara cu privire la condiii privind drepturile de autor. NU se asuma NICIO RESPONSABILITATE. Daca gasii erori in traducerea acestui manual, va rugam sa trimitei un e-mail la . Pagini de manual de Linux 6.06 31 octombrie 2023 pthread_spin_init(3)