資源簡介
在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??任務三\
評論
共有 條評論