Predavani pointeru se signalem
[mirrors/Programs.git] / c / pthread_extra / pthread_pause.c
index c0d43507d12702e4b6174d99d299e8cbbb3700df..e11a0531e3d645496da4822a9a828c8a046f096f 100644 (file)
@@ -59,10 +59,17 @@ void pthread_pause_disable() {
 
 int pthread_pause_reschedule(pthread_t thread) {
        //Send signal to initiate pause handler
-       while(pthread_kill(thread, PTHREAD_XSIG_STOP) == EAGAIN) usleep(1000);
+       //while(pthread_kill(thread, PTHREAD_XSIG_STOP) == EAGAIN) usleep(1000);
+       while(pthread_sigqueue(thread, PTHREAD_XSIG_STOP, (const union sigval){.sival_ptr=NULL}) == EAGAIN) usleep(1000);
        return 0;
 }
 
+int pthread_extra_yield() {
+       //Yield to both schedulers
+       pthread_pause_reschedule(pthread_self());
+       return pthread_yield();
+}
+
 int pthread_pause(pthread_t thread) {
        //Set thread as paused and notify it via signal (wait when queue full)
        pthread_user_data_internal(thread)->running = 0;
This page took 0.136514 seconds and 4 git commands to generate.