#include #include #include #include #include pthread_mutex_t mutex; pthread_mutex_t action_mutex; pthread_mutexattr_t mta; pthread_attr_t tattr1; pthread_attr_t tattr2; struct sched_param parm1; struct sched_param parm2; void *easy2(void *param1); void *easy3(void *param1); int main(int argc, char **argv) { pthread_t threadid; int err; if((err=pthread_mutex_init(&action_mutex,NULL))!=0) { perror("error"); exit(1); } err = pthread_attr_init(&tattr1); err = pthread_attr_init(&tattr2); err = pthread_attr_setschedpolicy(&tattr1, SCHED_FIFO); err = pthread_attr_setschedpolicy(&tattr2, SCHED_FIFO); memset(&parm1,0,sizeof(parm1)); memset(&parm2,0,sizeof(parm2)); parm1.sched_priority=8; parm2.sched_priority=10; pthread_attr_setschedparam(&tattr1,&parm1); pthread_attr_setschedparam(&tattr2,&parm2); pthread_create(&threadid,&tattr1,easy2,NULL); pthread_create(&threadid,&tattr2,easy3,NULL); while(1) { usleep(100000); } return(0); } void *easy2(void *param1) { printf("Starting thread 2:\n"); while(1) { pthread_mutex_lock(&action_mutex); printf("After lock 2\n"); sleep(2); pthread_mutex_unlock(&action_mutex); // sleep(1); } return(NULL); } void *easy3(void *param1) { printf("Starting thread 3:\n"); while(1) { pthread_mutex_lock(&action_mutex); printf("After lock 3\n"); sleep(3); pthread_mutex_unlock(&action_mutex); // sleep(2); } return(NULL); }