Pthread_cleanup_push_defer_np(3) - wariua/manpages-ko GitHub Wiki
pthread_cleanup_push_defer_np, pthread_cleanup_pop_restore_np - μ€λ λ μ·¨μ μ 리 νΈλ€λ¬ μ§μ΄λ£κ³ κΊΌλ΄λ©΄μ μ·¨μ κ°λ₯μ± μ νλ μ μ₯νκΈ°
#include <pthread.h>
void pthread_cleanup_push_defer_np(void (*routine)(void *),
void *arg);
void pthread_cleanup_pop_restore_np(int execute);
-pthread
λ‘ λ§ν¬.
μ΄ ν¨μλ€μ μ΄ νμ΄μ§μμ μΈκΈνλ μ°¨μ΄λ€μ μ μΈνλ©΄ pthread_cleanup_push(3) λ° pthread_cleanup_pop(3)κ³Ό κ°λ€.
pthread_cleanup_push_defer_np()
λ pthread_cleanup_push(3)μ²λΌ μ€λ λμ μ·¨μ μ 리 νΈλ€λ¬ μ€νμ routine
μ μ§μ΄λ£λλ€. κ·Έμ λν΄μ μ€λ λμ νμ¬ μ·¨μ κ°λ₯μ± μ νμ μ μ₯νκ³ μ·¨μ κ°λ₯μ± μ νμ "μ°κΈ°"λ‘ μ€μ νλ€. (pthread_setcanceltype(3) μ°Έκ³ .) μ΄λ κ² νλ©΄ νΈμΆ μ μ μ€λ λμ μ·¨μ κ°λ₯μ± μ νμ΄ "λΉλκΈ°"μλ κ²½μ°μλ μ·¨μ μ λ¦¬κ° μΌμ΄λκ² λλ€.
pthread_cleanup_pop_restore_np()
λ pthread_cleanup_pop(3)μ²λΌ μ€λ λμ μ·¨μ μ 리 νΈλ€λ¬ μ€νμμ μ΅μλ¨μ μ 리 νΈλ€λ¬λ₯Ό κΊΌλΈλ€. κ·Έμ λν΄μ μ€λ λμ μ·¨μ κ°λ₯μ± μ νμ λμνλ pthread_cleanup_push_defer_np()
νΈμΆ μμ μ κ°μΌλ‘ 볡μνλ€.
μ΄ ν¨μλ€μ νΈμΆμ΄ κ°μ ν¨μ μμ μλλ‘, κ·Έλ¦¬κ³ κ°μ λ¬Έλ²μ λ΄ν¬ λ¨κ³μ μλλ‘ ν΄μΌ νλ€. pthread_cleanup_push(3)μμ κΈ°μ νλ λ€λ₯Έ μ μ½λ€μ΄ λ§μ°¬κ°μ§λ‘ μ μ©λλ€.
λ€μ νΈμΆ μ΄μ΄
pthread_cleanup_push_defer_np(routine, arg);
pthread_cleanup_pop_restore_np(execute);
λ€μκ³Ό λλ±νλ€. (νμ§λ§ λ μ§§κ³ ν¨μ¨μ μ΄λ€.)
int oldtype;
pthread_cleanup_push(routine, arg);
pthread_setcanceltype(PTHREAD_CANCEL_DEFERRED, &oldtype);
...
pthread_setcanceltype(oldtype, NULL);
pthread_cleanup_pop(execute);
μ΄ ν¨μλ€μ λΉνμ€ GNU νμ₯μ΄λ€. κ·Έλμ μ΄λ¦ λ€μ "_np"(nonportable: μ΄μμ± μμ)κ° λΆμ΄ μλ€.
pthread_cancel(3), pthread_cleanup_push(3), pthread_setcancelstate(3), pthread_testcancel(3), pthreads(7)
2017-09-15