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

📄 step.c

📁 gdb that s ported for PXA270 processor. definitely helpful for people interested in embedded system
💻 C
字号:
/*    step.c for step.exp    */#include <ipc.h>#include <pthread.h>#include <st.h>#include <signal.h>#include <stdio.h>void alarm_handler ();void alarm_handler1 ();void alarm_handler2 ();void thread1 ();void thread2 ();#define TIME_LIMIT 30int count1 = 0;int count2 = 0;pthread_t tid1, tid2;pthread_attr_t attr1, attr2;pthread_mutex_t mut;pthread_mutexattr_t mut_attr;pthread_condattr_t cv_attr_a, cv_attr_b;pthread_cond_t cv_a, cv_b;struct cv_struct  {    char a;    char b;  }test_struct;main (){  /*init la struct */  test_struct.a = 0;  test_struct.b = 1;  /* create le mutex */  if (pthread_mutexattr_create (&mut_attr) == -1)    {      perror ("mutexattr_create");      exit (1);    }  if (pthread_mutex_init (&mut, mut_attr) == -1)    {      perror ("mutex_init");      exit (1);    }  /* create 2 cv */  if (pthread_condattr_create (&cv_attr_a) == -1)    {      perror ("condattr_create(1)");      exit (1);    }  if (pthread_cond_init (&cv_a, cv_attr_a) == -1)    {      perror ("cond_init(1)");      exit (1);    }  if (pthread_condattr_create (&cv_attr_b) == -1)    {      perror ("condattr_create(2)");      exit (1);    }  if (pthread_cond_init (&cv_b, cv_attr_b) == -1)    {      perror ("cond_init(2)");      exit (1);    }  /* create 2 threads of execution */  if (pthread_attr_create (&attr1) == -1)    {      perror ("attr_create(1)");      exit (1);    }  if (pthread_create (&tid1, attr1, thread1, &count1) == -1)    {      perror ("pthread_create(1)");      exit (1);    }  if (pthread_attr_create (&attr2) == -1)    {      perror ("attr_create(2)");      exit (1);    }  if (pthread_create (&tid2, attr2, thread2, &count2) == -1)    {      perror ("pthread_create(2)");      exit (1);    }  /* set alarm to print out data and exit */  signal (SIGALRM, alarm_handler);  alarm (TIME_LIMIT);  for (;;)    pause ();}void thread1 (count)     int *count;{  tid_t tid;  tid = getstid ();  printf ("Thread1 tid 0x%x  (%d) \n", tid, tid);  printf ("Thread1 @tid=0x%x \n", &tid);  signal (SIGALRM, alarm_handler1);  for (;;)    {      if (pthread_mutex_lock (&mut) == -1)	{	  perror ("pthread_mutex_lock(1)");	  pthread_exit ((void *) 0);	}      while (test_struct.a == 0)	{	  if (pthread_cond_wait (&cv_a, &mut) == -1)	    {	      perror ("pthread_cond_wait(1)");	      pthread_exit ((void *) -1);	    }	}      (*count)++;      printf ("*******thread1 count %d\n", *count);      test_struct.a = 0;      test_struct.b = 1;      pthread_cond_signal (&cv_b);      if (pthread_mutex_unlock (&mut) == -1)	{	  perror ("pthread_mutex_unlock(1)");	  pthread_exit ((void *) -1);	}    }}void thread2 (count)     int *count;{  tid_t tid;  tid = getstid ();  printf ("Thread2 tid 0x%x  (%d) \n", tid, tid);  printf ("Thread1 @tid=0x%x \n", &tid);  signal (SIGALRM, alarm_handler2);  for (;;)    {      if (pthread_mutex_lock (&mut) == -1)	{	  perror ("pthread_mutex_lock(2)");	  pthread_exit ((void *) 0);	}      while (test_struct.b == 0)	{	  if (pthread_cond_wait (&cv_b, &mut) == -1)	    {	      perror ("pthread_cond_wait(2)");	      pthread_exit ((void *) -1);	    }	}      (*count)++;      printf ("*******thread2 count %d\n", *count);      test_struct.b = 0;      test_struct.a = 1;      pthread_cond_signal (&cv_a);      if (pthread_mutex_unlock (&mut) == -1)	{	  perror ("pthread_mutex_unlock(2)");	  pthread_exit ((void *) -1);	}    }}void alarm_handler (){  printf ("\tcount1 (%d) \n\tcount2 (%d)\n", count1, count2);  exit (0);}void alarm_handler1 (){  printf ("ALARM thread 1\n");}void alarm_handler2 (){  printf ("ALARM thread 2\n");  pthread_exit ((void *) 0);}

⌨️ 快捷键说明

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