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

📄 pthreads.c

📁 gdb-6.0 linux 下的调试工具
💻 C
字号:
#include <stdio.h>#include <pthread.h>/* Under OSF 2.0 & 3.0 and HPUX 10, the second arg of pthread_create   is prototyped to be just a "pthread_attr_t", while under Solaris it   is a "pthread_attr_t *".  Arg! */#if defined (__osf__) || defined (__hpux__)#define PTHREAD_CREATE_ARG2(arg) arg#define PTHREAD_CREATE_NULL_ARG2 null_attrstatic pthread_attr_t null_attr;#else#define PTHREAD_CREATE_ARG2(arg) &arg#define PTHREAD_CREATE_NULL_ARG2 NULL#endifstatic int verbose = 0;static voidcommon_routine (arg)     int arg;{  static int from_thread1;  static int from_thread2;  static int from_main;  static int hits;  static int full_coverage;  if (verbose) printf("common_routine (%d)\n", arg);  hits++;  switch (arg)    {    case 0:      from_main++;      break;    case 1:      from_thread1++;      break;    case 2:      from_thread2++;      break;    }  if (from_main && from_thread1 && from_thread2)    full_coverage = 1;}static void *thread1 (void *arg){  int i;  int z = 0;  if (verbose) printf ("thread1 (%0x) ; pid = %d\n", arg, getpid ());  for (i=1; i <= 10000000; i++)    {      if (verbose) printf("thread1 %d\n", pthread_self ());      z += i;      common_routine (1);      sleep(1);    }  return (void *) 0;}static void *thread2 (void * arg){  int i;  int k = 0;  if (verbose) printf ("thread2 (%0x) ; pid = %d\n", arg, getpid ());  for (i=1; i <= 10000000; i++)    {      if (verbose) printf("thread2 %d\n", pthread_self ());      k += i;      common_routine (2);      sleep(1);    }  sleep(100);  return (void *) 0;}voidfoo (a, b, c)     int a, b, c;{  int d, e, f;  if (verbose) printf("a=%d\n", a);}main(argc, argv)     int argc;     char **argv;{  pthread_t tid1, tid2;  int j;  int t = 0;  void (*xxx) ();  pthread_attr_t attr;  if (verbose) printf ("pid = %d\n", getpid());  foo (1, 2, 3);#ifndef __osf__  if (pthread_attr_init (&attr))    {      perror ("pthread_attr_init 1");      exit (1);    }#endif#ifdef PTHREAD_SCOPE_SYSTEM  if (pthread_attr_setscope (&attr, PTHREAD_SCOPE_SYSTEM))    {      perror ("pthread_attr_setscope 1");      exit (1);    }#endif  if (pthread_create (&tid1, PTHREAD_CREATE_ARG2(attr), thread1, (void *) 0xfeedface))    {      perror ("pthread_create 1");      exit (1);    }  if (verbose) printf ("Made thread %d\n", tid1);  sleep (1);  if (pthread_create (&tid2, PTHREAD_CREATE_NULL_ARG2, thread2, (void *) 0xdeadbeef))    {      perror ("pthread_create 2");      exit (1);    }  if (verbose) printf("Made thread %d\n", tid2);  sleep (1);  for (j = 1; j <= 10000000; j++)    {      if (verbose) printf("top %d\n", pthread_self ());      common_routine (0);      sleep(1);      t += j;    }    exit(0);}

⌨️ 快捷键说明

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