第一题:
代码如下:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <stdarg.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <dirent.h>
#include <sys/wait.h>
#include <pthread.h>
#include <semaphore.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <sys/shm.h>
#include <sys/sem.h>
#include <arpa/inet.h>
pthread_mutex_t mutex; //定义互斥锁
void* run(void* arg)
{
while(1)
{
/* pthread_mutex_unlock(&mutex);
printf("解锁成功\n");
*/
if(pthread_mutex_lock(&mutex)==-1){
printf("上锁失败\n");
}
else{
printf("上锁成功\n");
}
printf("a\n");
sleep(1);
}
}
int main(int argc,char* agr[])
{
//定义(创建)互斥锁属性
pthread_mutexattr_t mutexattr;
//初始化互斥锁属性
pthread_mutexattr_init(&mutexattr);
//设置互斥锁类型
if(strcmp(agr[1],"error")==0){
pthread_mutexattr_settype(&mutexattr,PTHREAD_MUTEX_ERRORCHECK);//错误检查锁
}
else if(strcmp(agr[1],"rec")==0){
pthread_mutexattr_settype(&mutexattr,PTHREAD_MUTEX_RECURSIVE);//递归互斥锁
}
//初始化,不是直接赋值为NULL了
pthread_mutex_init(&mutex,&mutexattr);
pthread_t id;
pthread_create(&id,0,run,0);
pthread_detach(id);
while(1)
{
//第一次上锁
if(pthread_mutex_lock(&mutex)==-1){
printf("上锁失败\n");
}
else{
printf("上锁成功\n");
}
printf("b\n");
sleep(1);
}
return 0;
}
结果如下:
第二题:
代码如下: