P操作:
V操作:
#include<stdio.h>
#include<stdlib.h>
#include<pthread.h>
#include<string.h>
char* buf[5];
int pos;
//1.定義互斥量
pthread_mutex_t mutex;
void* task(void* pv){
//3.使用互斥量進行加鎖
pthread_mutex_lock(&mutex);
//4.訪問共享內存
buf[pos]=(char*)pv;
sleep(1);
pos++;
//5.使用互斥量進行解鎖
pthread_mutex_unlock(&mutex);
}
main(){
//2.初始化互斥量
pthread_mutex_init(&mutex,NULL);
pthread_t thread;
pthread_create(&thread,NULL,task,(void*)"zhangfei");
pthread_t thread2;
pthread_create(&thread2,NULL,task,(void*)"guanyu");
pthread_join(thread,NULL);
pthread_join(thread2,NULL);
//打印字符指針數組中的有效數據
int i=0;
for(i=0;i<pos;i++){
printf("%s ",buf[i]);
}
printf("\n");
//6.如果不再使用則銷毀互斥量
pthread_mutex_destroy(&mutex);
return 0;
}
#include<stdio.h>
#include<stdlib.h>
#include<pthread.h>
#include<string.h>
#include<semaphore.h>
char* buf[5];
int pos;
//1.定義信號量
sem_t sem;
void* task(void* pv){
//3.使用信號量,-1
sem_wait(&sem);
//4.訪問共享內存
buf[pos]=(char*)pv;
sleep(1);
pos++;
//5.使用信號量進行解鎖
sem_post(&sem);
}
main(){
//2.初始化信號量
sem_init(&sem,0,1);
pthread_t thread;
pthread_create(&thread,NULL,task,(void*)"zhangfei");
pthread_t thread2;
pthread_create(&thread2,NULL,task,(void*)"guanyu");
pthread_join(thread,NULL);
pthread_join(thread2,NULL);
//打印字符指針數組中的有效數據
int i=0;
for(i=0;i<pos;i++){
printf("%s ",buf[i]);
}
printf("\n");
//6.如果不再使用則銷毀信號量
sem_destroy(&sem);
return 0;
}