[HTML/CSS] 簡單的Menu圖示
阿新 • • 發佈:2022-05-11
執行緒的同步:用的是訊號燈來實現
1. 執行緒訊號燈的初始化
- include <semaphore.h>
- sem_t sem; int
sem_init(sem_t *sem, int pshared, unsigned int value);
****編譯時後面如**gcc xx.c -o xx -pthread
功能:
訊號燈的初始化
引數: sem : 訊號燈的標誌
pshared : 0 ---> 在當前程序中都可以使用該訊號燈
value : 值 訊號的燈的數量
返回值: 成功返回0 失敗返回-1 並設定error
- 實現訊號燈的PV操作
P :減法操作
#include <semaphore.h>
int sem_wait(sem_t *sem);
功能: p操作,如果不夠減,就阻塞等待
引數: sem : 訊號燈
返回值: 成功返回0 失敗返回-1 並設定error
- V :加法操作
#include <semaphore.h>
int sem_post(sem_t *sem);
Link with -pthread.
功能: V操作 給value做加法操作
引數: sem : 訊號燈
返回值:
成功返回0
失敗返回-1 並設定error
#include <stdio.h>
#include <pthread.h>
#include <stdlib.h>
#include <unistd.h>
#include <semaphore.h>
sem_t sem;
void *show1(void *arg)
{
int b = 10;
while(--b){
sleep(1);
printf("I LOVEU\n");
}
sem_post(&sem);
pthread_exit(NULL);
return NULL;
}
void *show2(void *arg)
{
sem_wait(&sem);
int b =10;
while(--b){
sleep(1);
printf("gun\n");
}
pthread_exit(NULL);
//sem_post(&sem);
return NULL;
}
int main(void)
{
if(sem_init(&sem,0,0)){
perror("sem_init error");
exit(-1);
}
pthread_t thread1;///執行緒1
if(pthread_create(&thread1,NULL,show1,NULL)){
perror("pthread_create error");
exit(-1);
}
///設定分離屬性分離屬性
if(pthread_detach(thread1)){
perror("pthread_detach error");
exit(-1);
}
///建立執行緒2
pthread_t thread2;
if(pthread_create(&thread2,NULL,show2,NULL)){
perror("pthread_create error");
exit(-1);
}
//設定分離屬性分離屬性2
if(pthread_detach(thread2)){
perror("pthread_detach error");
exit(-1);
}
while(1);
return 0;
}