📄 usrthbasic.c
字号:
/* OBSOLETE #include <stdio.h> *//* OBSOLETE *//* OBSOLETE /* #include "config.h" */ *//* OBSOLETE #define HAVE_PTHREAD_H *//* OBSOLETE #define __hpux__ *//* OBSOLETE #define __osf__ *//* OBSOLETE *//* OBSOLETE #ifndef HAVE_PTHREAD_H *//* OBSOLETE *//* OBSOLETE /* Don't even try to compile. In fact, cause a syntax error that we can *//* OBSOLETE look for as a compiler error message and know that we have no pthread *//* OBSOLETE support. In that case we can just suppress the test completely. */ *//* OBSOLETE *//* OBSOLETE #error "no posix threads support" *//* OBSOLETE *//* OBSOLETE #else *//* OBSOLETE *//* OBSOLETE /* OK. We have the right header. If we try to compile this and fail, then *//* OBSOLETE there is something wrong and the user should know about it so the testsuite *//* OBSOLETE should issue an ERROR result.. */ *//* OBSOLETE *//* OBSOLETE #ifdef __linux__ *//* OBSOLETE #define _MIT_POSIX_THREADS 1 /* Linux (or at least RedHat 4.0) needs this */ *//* OBSOLETE #endif *//* OBSOLETE *//* OBSOLETE #include <pthread.h> *//* OBSOLETE *//* OBSOLETE /* Under OSF 2.0 & 3.0 and HPUX 10, the second arg of pthread_create *//* OBSOLETE is prototyped to be just a "pthread_attr_t", while under Solaris it *//* OBSOLETE is a "pthread_attr_t *". Arg! */ *//* OBSOLETE *//* OBSOLETE #if defined (__osf__) || defined (__hpux__) *//* OBSOLETE #define PTHREAD_CREATE_ARG2(arg) arg *//* OBSOLETE #define PTHREAD_CREATE_NULL_ARG2 null_attr *//* OBSOLETE static pthread_attr_t null_attr; *//* OBSOLETE #else *//* OBSOLETE #define PTHREAD_CREATE_ARG2(arg) &arg *//* OBSOLETE #define PTHREAD_CREATE_NULL_ARG2 NULL *//* OBSOLETE #endif *//* OBSOLETE *//* OBSOLETE static int verbose = 0; *//* OBSOLETE *//* OBSOLETE static void *//* OBSOLETE common_routine (arg) *//* OBSOLETE int arg; *//* OBSOLETE { *//* OBSOLETE static int from_thread1; *//* OBSOLETE static int from_thread2; *//* OBSOLETE static int from_main; *//* OBSOLETE static int hits; *//* OBSOLETE static int full_coverage; *//* OBSOLETE *//* OBSOLETE if (verbose) printf("common_routine (%d)\n", arg); *//* OBSOLETE hits++; *//* OBSOLETE switch (arg) *//* OBSOLETE { *//* OBSOLETE case 0: *//* OBSOLETE from_main++; *//* OBSOLETE break; *//* OBSOLETE case 1: *//* OBSOLETE from_thread1++; *//* OBSOLETE break; *//* OBSOLETE case 2: *//* OBSOLETE from_thread2++; *//* OBSOLETE break; *//* OBSOLETE } *//* OBSOLETE if (from_main && from_thread1 && from_thread2) *//* OBSOLETE full_coverage = 1; *//* OBSOLETE } *//* OBSOLETE *//* OBSOLETE static void * *//* OBSOLETE thread1 (void *arg) *//* OBSOLETE { *//* OBSOLETE int i; *//* OBSOLETE int z = 0; *//* OBSOLETE *//* OBSOLETE if (verbose) printf ("thread1 (%0x) ; pid = %d\n", arg, getpid ()); *//* OBSOLETE for (i=1; i <= 10000000; i++) *//* OBSOLETE { *//* OBSOLETE if (verbose) printf("thread1 %d\n", pthread_self ()); *//* OBSOLETE z += i; *//* OBSOLETE common_routine (1); *//* OBSOLETE sleep(1); *//* OBSOLETE } *//* OBSOLETE } *//* OBSOLETE *//* OBSOLETE static void * *//* OBSOLETE thread2 (void * arg) *//* OBSOLETE { *//* OBSOLETE int i; *//* OBSOLETE int k = 0; *//* OBSOLETE *//* OBSOLETE if (verbose) printf ("thread2 (%0x) ; pid = %d\n", arg, getpid ()); *//* OBSOLETE for (i=1; i <= 10000000; i++) *//* OBSOLETE { *//* OBSOLETE if (verbose) printf("thread2 %d\n", pthread_self ()); *//* OBSOLETE k += i; *//* OBSOLETE common_routine (2); *//* OBSOLETE sleep(1); *//* OBSOLETE } *//* OBSOLETE sleep(100); *//* OBSOLETE } *//* OBSOLETE *//* OBSOLETE int *//* OBSOLETE foo (a, b, c) *//* OBSOLETE int a, b, c; *//* OBSOLETE { *//* OBSOLETE int d, e, f; *//* OBSOLETE *//* OBSOLETE if (verbose) printf("a=%d\n", a); *//* OBSOLETE } *//* OBSOLETE *//* OBSOLETE main(argc, argv) *//* OBSOLETE int argc; *//* OBSOLETE char **argv; *//* OBSOLETE { *//* OBSOLETE pthread_t tid1, tid2; *//* OBSOLETE int j; *//* OBSOLETE int t = 0; *//* OBSOLETE void (*xxx) (); *//* OBSOLETE pthread_attr_t attr; *//* OBSOLETE *//* OBSOLETE if (verbose) printf ("pid = %d\n", getpid()); *//* OBSOLETE *//* OBSOLETE foo (1, 2, 3); *//* OBSOLETE *//* OBSOLETE #ifndef __osf__ *//* OBSOLETE if (pthread_attr_init (&attr)) *//* OBSOLETE { *//* OBSOLETE perror ("pthread_attr_init 1"); *//* OBSOLETE exit (1); *//* OBSOLETE } *//* OBSOLETE #endif *//* OBSOLETE *//* OBSOLETE #ifdef PTHREAD_SCOPE_SYSTEM *//* OBSOLETE if (pthread_attr_setscope (&attr, PTHREAD_SCOPE_SYSTEM)) *//* OBSOLETE { *//* OBSOLETE perror ("pthread_attr_setscope 1"); *//* OBSOLETE exit (1); *//* OBSOLETE } *//* OBSOLETE #endif *//* OBSOLETE *//* OBSOLETE if (pthread_create (&tid1, pthread_attr_default, thread1, (void *) 0xfeedface)) *//* OBSOLETE { *//* OBSOLETE perror ("pthread_create 1"); *//* OBSOLETE exit (1); *//* OBSOLETE } *//* OBSOLETE if (verbose) printf ("Made thread %d\n", tid1); *//* OBSOLETE sleep (1); *//* OBSOLETE *//* OBSOLETE if (pthread_create (&tid2, null_attr, thread2, (void *) 0xdeadbeef)) *//* OBSOLETE { *//* OBSOLETE perror ("pthread_create 2"); *//* OBSOLETE exit (1); *//* OBSOLETE } *//* OBSOLETE if (verbose) printf("Made thread %d\n", tid2); *//* OBSOLETE *//* OBSOLETE sleep (1); *//* OBSOLETE *//* OBSOLETE for (j = 1; j <= 10000000; j++) *//* OBSOLETE { *//* OBSOLETE if (verbose) printf("top %d\n", pthread_self ()); *//* OBSOLETE common_routine (0); *//* OBSOLETE sleep(1); *//* OBSOLETE t += j; *//* OBSOLETE } *//* OBSOLETE *//* OBSOLETE exit(0); *//* OBSOLETE } *//* OBSOLETE *//* OBSOLETE #endif /* ifndef HAVE_PTHREAD_H */ */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -