资源简介

在linux上分别用多进程和多线程实现的同步互斥操作(源代码)

资源截图

代码片段和文件信息

#include 
#include
#include 
#include 
#include 
#include 
#include
#include            /* For O_* constants */
#include         /* For mode constants */
#include 
#include
sem_t *sem1*sem2*sem3*sem4*sem5*sem6*sem7;
pthread_t p1p2p3p4p5p6;
const int T=5;
void get_sem(void);
void inite(void);
void creat_pthread(void);
void *P1(void* arg);
void* P2(void*);
void *P3(void*);
void *P4(void*);
void* P5(void*);
void *P6(void*);
void join(void);
int main()
{
    get_sem();
    inite();
    creat_pthread();
    join();  
    return 0;
}
void get_sem(void)
{
    if((sem1 = sem_open(“sem1“  O_RDWR|O_CREAT 0666)) == SEM_FAILED){
 perror(“semget sem1 error!\n“);
    }
    if((sem2 = sem_open(“sem2“ O_RDWR|O_CREAT 0666)) == SEM_FAILED){
perror(“semget sem2 erroe!\n“);
    }
    if((sem3 = sem_open(“sem3“O_RDWR|O_CREAT 0666)) == SEM_FAILED){
perror(“semget sem3 erroe!\n“);
    }
   if((sem4 = sem_open(“sem4“ O_RDWR|O_CREAT 0666)) == SEM_FAILED){
 perror(“semget sem4 error!\n“);
    }
    if((sem5 = sem_open(“sem5“O_RDWR|O_CREAT 0666)) == SEM_FAILED){
perror(“semget sem5 erroe!\n“);
    }
    if((sem6 = sem_open(“sem6“O_RDWR|O_CREAT 0666)) == SEM_FAILED){
perror(“semget sem6 erroe!\n“);
    }
    if((sem7 = sem_open(“sem7“O_RDWR|O_CREAT 0666)) == SEM_FAILED){
perror(“semget sem7 erroe!\n“);
    }
return ;
}
void inite(void)
{
    if(sem_init(sem1 0 0)<0){
 perror(“inite sem1 error!\n“);
    }
    if(sem_init(sem2 0 0)<0){
 perror(“inite sem2 error!\n“);
    }
    if(sem_init(sem3 0 0)<0){
 perror(“inite sem3 error!\n“);
    }
    if(sem_init(sem4 0 0)<0){
 perror(“inite sem4 error!\n“);
    }
    if(sem_init(sem5 0 0)<0){
 perror(“inite sem1 error!\n“);
    }
    if(sem_init(sem6 0 0)<0){
 perror(“inite sem1 error!\n“);
    }
     if(sem_init(sem7 0 0)<0){
 perror(“inite sem7 error!\n“);
    }
return ;
}
void creat_pthread(void)
{
if(pthread_create(&p1NULL&P1NULL)){
printf(“error ctreating thread“);
       abort();
}
if(pthread_create(&p2NULL&P2NULL)){
printf(“error ctreating thread“);
       abort();
}
if(pthread_create(&p3NULLP3NULL)){
printf(“error ctreating thread“);
       abort();
}
if(pthread_create(&p4NULLP4NULL)){
printf(“error ctreating thread“);
       abort();
}
if(pthread_create(&p5NULLP5NULL)){
printf(“error ctreating thread“);
       abort();
}
if(pthread_create(&p6NULLP6NULL)){
printf(“error ctreating thread“);
       abort();
}
return ;
}
void* P1(void *arg)
{
    int t=T;
    while(t--)
    {
printf(“I am thread 1\n“);
sleep(1);
    }
   if(sem_post(sem1) == -1){
   perror(“线程2的 V操作错误\n“);
    }
   if(sem_post(sem2) == -1){
   perror(“线程3的 V操作错误\n“);
    }
return NULL;
}

void* P2(void *arg)
{
    int t=T;
if(sem_wait(sem1) == -1){
      perror(“线程2的 P操作错误\n“);
}
    while(t--)
    {
printf(“I am thread 2\n“);
       sleep(1);
    }
   if(sem

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件       15261  2013-04-18 03:25  任务三\多线程实现同步互斥\thread
     文件        4517  2012-06-13 03:43  任务三\多线程实现同步互斥\thread.cpp
     文件          84  2013-04-18 03:25  任务三\多线程实现同步互斥\makefile
     文件         420  2012-06-13 08:48  任务三\多进程实现同步互斥\makefile
     文件        7473  2012-06-13 09:30  任务三\多进程实现同步互斥\P1
     文件         297  2012-06-13 08:27  任务三\多进程实现同步互斥\P1.cpp
     文件        7509  2012-06-13 09:30  任务三\多进程实现同步互斥\P2
     文件         338  2012-06-13 09:29  任务三\多进程实现同步互斥\P2.cpp
     文件        7473  2012-06-13 09:30  任务三\多进程实现同步互斥\P3
     文件         297  2012-06-13 09:29  任务三\多进程实现同步互斥\P3.cpp
     文件        7473  2012-06-13 09:30  任务三\多进程实现同步互斥\P4
     文件         297  2012-06-13 09:29  任务三\多进程实现同步互斥\P4.cpp
     文件        7509  2012-06-13 09:30  任务三\多进程实现同步互斥\P5
     文件         338  2012-06-13 07:09  任务三\多进程实现同步互斥\P5.cpp
     文件        7473  2012-06-13 09:30  任务三\多进程实现同步互斥\P6
     文件         297  2012-06-13 07:09  任务三\多进程实现同步互斥\P6.cpp
     文件         377  2012-06-13 09:30  任务三\多进程实现同步互斥\PV.cpp
     文件         218  2012-06-13 07:09  任务三\多进程实现同步互斥\PV.h
     文件       15113  2013-04-18 03:26  任务三\多进程实现同步互斥\sysv
     文件        4665  2012-06-13 09:29  任务三\多进程实现同步互斥\sysv.cpp
     目录           0  2013-04-18 04:26  任务三\多线程实现同步互斥\
     目录           0  2013-04-18 04:25  任务三\多进程实现同步互斥\
     目录           0  2013-04-18 04:26  任务三\

评论

共有 条评论