1. 程式人生 > 其它 >[HTML/CSS] 簡單的Menu圖示

[HTML/CSS] 簡單的Menu圖示

執行緒的同步:用的是訊號燈來實現
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; }