⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 thread5.c

📁 gdb-6.8 Linux下的调试程序 最新版本
💻 C
字号:
/* Compiler options:#notarget: cris*-*-elf#cc: additional_flags=-pthread#output: abbb ok\n   Testing a signal handler corner case.  */#include <stddef.h>#include <stdlib.h>#include <stdio.h>#include <unistd.h>#include <signal.h>#include <pthread.h>static void *process (void *arg){  write (2, "a", 1);  write (2, "b", 1);  write (2, "b", 1);  write (2, "b", 1);  return NULL;}int ok = 0;volatile int done = 0;voidsigusr1 (int signum){  if (signum != SIGUSR1 || !ok)    abort ();  done = 1;}intmain (void){  int retcode;  pthread_t th_a;  void *retval;  sigset_t sigs;  if (sigemptyset (&sigs) != 0)    abort ();  retcode = pthread_create (&th_a, NULL, process, NULL);  if (retcode != 0)    abort ();  if (signal (SIGUSR1, sigusr1) != SIG_DFL)    abort ();  if (pthread_sigmask (SIG_BLOCK, NULL, &sigs) != 0      || sigaddset (&sigs, SIGUSR1) != 0      || pthread_sigmask (SIG_BLOCK, &sigs, NULL) != 0)    abort ();  if (pthread_kill (pthread_self (), SIGUSR1) != 0      || sched_yield () != 0      || sched_yield () != 0      || sched_yield () != 0)    abort ();  ok = 1;  if (pthread_sigmask (SIG_UNBLOCK, NULL, &sigs) != 0      || sigaddset (&sigs, SIGUSR1) != 0      || pthread_sigmask (SIG_UNBLOCK, &sigs, NULL) != 0)    abort ();  if (!done)    abort ();  retcode = pthread_join (th_a, &retval);  if (retcode != 0)    abort ();  fprintf (stderr, " ok\n");  return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -