国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

當(dāng)前位置: 首頁(yè) > news >正文

wordpress獲取菜單欄優(yōu)化大師好用嗎

wordpress獲取菜單欄,優(yōu)化大師好用嗎,門(mén)戶(hù)網(wǎng)站開(kāi)發(fā)需要,中國(guó)做視頻網(wǎng)站有哪些內(nèi)容概述 什么是信號(hào)燈: 信號(hào)燈也稱(chēng)為信號(hào)量,代表的是一類(lèi)資源,其值表示系統(tǒng)中該資源的數(shù)量。 主要用途是實(shí)現(xiàn)進(jìn)程、線(xiàn)程的同步。 什么是P/V操作: P操作就是申請(qǐng)資源,V操作就是釋放操作。 信號(hào)燈的種類(lèi): …

概述

什么是信號(hào)燈:

信號(hào)燈也稱(chēng)為信號(hào)量,代表的是一類(lèi)資源,其值表示系統(tǒng)中該資源的數(shù)量。

主要用途是實(shí)現(xiàn)進(jìn)程、線(xiàn)程的同步。

什么是P/V操作:

P操作就是申請(qǐng)資源,V操作就是釋放操作。

信號(hào)燈的種類(lèi):

Posix 有名信號(hào)燈:編譯時(shí)需鏈接pthread庫(kù)。有名信號(hào)燈文件存放在/dev/shm目錄下

Posix 無(wú)名信號(hào)燈:只支持線(xiàn)程同步,編譯時(shí)需鏈接pthread庫(kù)

System V 信號(hào)燈

Posix 信號(hào)燈

Posix 信號(hào)燈的打開(kāi)/關(guān)閉/刪除函數(shù)有所不同,但PV操作是使用的同一組函數(shù)。具體函數(shù)如下

1、?打開(kāi)/關(guān)閉/刪除

1.1 有名信號(hào)燈

//打開(kāi)
sem_t *sem_open(const char *name,int oflag);
sem_t *sem_open(const char *name,int oflag,mode_t mode,unsigned int value);
//關(guān)閉
int sem_close(sem_t *sem);
//刪除
int sem_unlink(const char *name);

返回值:成功返回信號(hào)量指針,失敗返回SEM_FAILED

name:信號(hào)燈的名字,即:文件名

oflag:打開(kāi)方式,常用O_CREAT

mode:文件權(quán)限,常用0666

value:信號(hào)量值。二元信號(hào)燈值為1,普通信號(hào)燈表示資源數(shù)目。

1.2 無(wú)名信號(hào)燈

//創(chuàng)建
int sem_init(sem_t *sem, int pshared, unsigned int value);
//銷(xiāo)毀
int sem_destroy(sem_t *sem);

sem:信號(hào)量指針

pshared:寫(xiě)0,代表不能在進(jìn)程間共享。Linux中無(wú)名信號(hào)燈不能在進(jìn)程間通信

value:信號(hào)量值。

2、P/V操作

2.1 P操作

int sem_wait(sem_t *sem);

當(dāng)信號(hào)量為0時(shí),進(jìn)入阻塞,直到信號(hào)量不為0

當(dāng)信號(hào)量不為0時(shí),會(huì)將信號(hào)量的值-1

2.2?V操作

int sem_post(sem_t *sem);

該函數(shù)使用后會(huì)將信號(hào)量值+1

System V?信號(hào)燈

1、創(chuàng)建

int semget(key_t key, int nsems, int semflg);

返回值:成功返回信號(hào)燈id,失敗返回-1

key:鍵值,由ftok生成

nsems:信號(hào)燈的個(gè)數(shù)

semflg:權(quán)限,通常寫(xiě)為IPC_CREAT|0666

2、控制信號(hào)燈

int semctl(int semid, int semnum, int cmd, ...);

semid:信號(hào)燈id

semnum:操作哪一個(gè)信號(hào)燈,序號(hào)從0開(kāi)始

cmd:寫(xiě)入IPC_RMID,代表刪除操作

? ? ? ? ? ?寫(xiě)入SETVAL,代表初始化信號(hào)燈的值,此時(shí)需要傳入第四個(gè)參數(shù),類(lèi)型是共用體

union semun共用體:

union semun {int val;                //設(shè)置信號(hào)燈的初始值struct semid_ds *buf;unsigned short  *array;
} arg;

3、P/V操作

int semop(int semid, struct sembuf *sops, size_t nsops);

semid:信號(hào)燈id

sops:P/V操作

nsops:要操作的信號(hào)燈個(gè)數(shù),通常寫(xiě)1

struct sembuf結(jié)構(gòu)體:

struct sembuf {unsigned short sem_num;    //要操作的信號(hào)燈的編號(hào)short sem_op;              //1:V操作,-1:P操作short sem_flg;             //0:阻塞,IPC_NOWAIT不阻塞
};

示例代碼

1、有名信號(hào)燈

見(jiàn)博文"12.2 Linux_進(jìn)程間通信_(tái)共享內(nèi)存"-"相關(guān)函數(shù)"-"實(shí)驗(yàn)代碼"-"2、AB進(jìn)程互傳數(shù)據(jù)"

博文鏈接為:12.2 Linux_進(jìn)程間通信_(tái)共享內(nèi)存-CSDN博客

2、無(wú)名信號(hào)燈

無(wú)名信號(hào)燈只能用于線(xiàn)程間通信,下面是無(wú)名信號(hào)燈實(shí)現(xiàn)AB線(xiàn)程利用共享內(nèi)存互傳數(shù)據(jù)。

#include <stdio.h>
#include <errno.h>
#include <pthread.h>
#include <sys/mman.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <semaphore.h>sem_t sem_mmap;
void* mmap_addr = NULL;
char buf[100] = {0};
int i=0;
void* Afun(void* arg){memcpy(mmap_addr,"A Start SIG",strlen("A Start SIG"));while(1){sem_wait(&sem_mmap);if(*(char*)mmap_addr == 'B'){//讀出B線(xiàn)程寫(xiě)入的內(nèi)容printf("A read:%s\n",(char*)mmap_addr+strlen("B"));//讀取數(shù)據(jù),不讀取數(shù)據(jù)來(lái)源標(biāo)號(hào)memset(mmap_addr,0,strlen(mmap_addr));//清空緩沖區(qū)//寫(xiě)入新數(shù)據(jù)memcpy(mmap_addr,"A",strlen("A"));//數(shù)據(jù)來(lái)源標(biāo)號(hào)sprintf(buf,"A_Data:%d",i++);     //新數(shù)據(jù)memcpy(mmap_addr+strlen("A"),buf,strlen(buf));}sem_post(&sem_mmap);}
}
void* Bfun(void* arg){while(1){sem_wait(&sem_mmap);if(*(char*)mmap_addr == 'A'){//讀出A線(xiàn)程寫(xiě)入的內(nèi)容printf("B read:%s\n",(char*)mmap_addr+strlen("A"));memset(mmap_addr,0,strlen(mmap_addr));//清空緩沖區(qū)//寫(xiě)入新數(shù)據(jù)memcpy(mmap_addr,"B",strlen("B"));//數(shù)據(jù)來(lái)源標(biāo)號(hào)sprintf(buf,"B get A data,B data is %d",i++);     //新數(shù)據(jù)memcpy(mmap_addr+strlen("B"),buf,strlen(buf));sleep(1);}sem_post(&sem_mmap);}
}#define FILE_PATH "./mmap"
int main(){pthread_t tid[2];int fd;//打開(kāi)文件if((fd=open(FILE_PATH,O_RDWR)) < 0){perror("open");return -1;}//創(chuàng)建共享內(nèi)存映射if((mmap_addr = mmap(NULL,4*1024,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0)) == MAP_FAILED){perror("mmap");return -1;}memset(mmap_addr,lseek(fd,0,SEEK_END),strlen(mmap_addr));//清空緩沖區(qū)close(fd);//創(chuàng)建共享內(nèi)存映射后可以關(guān)閉文件描述符//創(chuàng)建信號(hào)量sem_init(&sem_mmap,0,1);//創(chuàng)建線(xiàn)程pthread_create(&tid[0],NULL,Afun,NULL);pthread_create(&tid[1],NULL,Bfun,NULL);while(1);return 0;
}

3、System V信號(hào)燈

使用SystemV信號(hào)燈實(shí)現(xiàn)"有名信號(hào)燈"章節(jié)的同樣功能

A.c代碼如下:

#include <sys/sem.h>
#include <sys/mman.h>
#include <string.h>
#include <stdio.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>#define FILE_PATH "./mmap"
union semun {int val;                //設(shè)置信號(hào)燈的初始值struct semid_ds *buf;unsigned short  *array;
} arg;
int main(){int fd;void* mmap_addr = NULL;int i=0;char buf[100] = {0};key_t key;int sem_mmap;struct sembuf semPV;//打開(kāi)文件if((fd=open(FILE_PATH,O_RDWR)) < 0){perror("open");return -1;}//創(chuàng)建共享內(nèi)存映射if((mmap_addr = mmap(NULL,4*1024,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0)) == MAP_FAILED){perror("mmap");return -1;}memset(mmap_addr,0,lseek(fd,0,SEEK_END));//清空緩沖區(qū)close(fd);//創(chuàng)建共享內(nèi)存映射后可以關(guān)閉文件描述符//創(chuàng)建信號(hào)量key = ftok(".",1);if((sem_mmap = semget(key,1,IPC_CREAT|0666)) == -1){perror("sem_get");return -1;}arg.val = 1;semctl(sem_mmap,0,SETVAL,arg);//進(jìn)程間通信memcpy(mmap_addr,"A Start SIG",strlen("A Start SIG"));while(1){semPV.sem_num = 0;semPV.sem_op=-1;semPV.sem_flg=0;semop(sem_mmap,&semPV,1);if(*(char*)mmap_addr == 'B'){//讀出B進(jìn)程寫(xiě)入的內(nèi)容printf("A read:%s\n",(char*)mmap_addr+strlen("B"));//讀取數(shù)據(jù),不讀取數(shù)據(jù)來(lái)源標(biāo)號(hào)memset(mmap_addr,0,strlen(mmap_addr));//清空緩沖區(qū)//寫(xiě)入新數(shù)據(jù)memcpy(mmap_addr,"A",strlen("A"));//數(shù)據(jù)來(lái)源標(biāo)號(hào)sprintf(buf,"A_Data:%d",i++);     //新數(shù)據(jù)memcpy(mmap_addr+strlen("A"),buf,strlen(buf));}semPV.sem_num = 0;semPV.sem_op=1;semPV.sem_flg=0;semop(sem_mmap,&semPV,1);}return 0;
}

B.c的代碼如下:

#include <sys/mman.h>
#include <sys/sem.h>
#include <string.h>
#include <stdio.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>#define FILE_PATH "./mmap"
union semun {int val;                //設(shè)置信號(hào)燈的初始值struct semid_ds *buf;unsigned short  *array;
} arg;
int main(){int fd;void* mmap_addr = NULL;int i=0;char buf[100] = {0};key_t key;int sem_mmap;struct sembuf semPV;//打開(kāi)文件if((fd=open(FILE_PATH,O_RDWR)) < 0){perror("open");return -1;}//創(chuàng)建共享內(nèi)存映射if((mmap_addr = mmap(NULL,4*1024,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0)) == MAP_FAILED){perror("mmap");return -1;}memset(mmap_addr,0,lseek(fd,0,SEEK_END));//清空緩沖區(qū)close(fd);//創(chuàng)建共享內(nèi)存映射后可以關(guān)閉文件描述符//創(chuàng)建信號(hào)量key = ftok(".",1);if((sem_mmap = semget(key,1,IPC_CREAT|0666)) == -1){perror("sem_get");return -1;}arg.val = 1;semctl(sem_mmap,0,SETVAL,arg);//進(jìn)程間通信while(1){semPV.sem_num = 0;semPV.sem_op=-1;semPV.sem_flg=0;semop(sem_mmap,&semPV,1);if(*(char*)mmap_addr == 'A'){//讀出A進(jìn)程寫(xiě)入的內(nèi)容printf("B read:%s\n",(char*)mmap_addr+strlen("A"));memset(mmap_addr,0,strlen(mmap_addr));//清空緩沖區(qū)//寫(xiě)入新數(shù)據(jù)memcpy(mmap_addr,"B",strlen("B"));//數(shù)據(jù)來(lái)源標(biāo)號(hào)sprintf(buf,"B get A data,B data is %d",i++);     //新數(shù)據(jù)memcpy(mmap_addr+strlen("B"),buf,strlen(buf));sleep(1);}semPV.sem_num = 0;semPV.sem_op=1;semPV.sem_flg=0;semop(sem_mmap,&semPV,1);}return 0;
}

http://aloenet.com.cn/news/43608.html

相關(guān)文章:

  • 好建網(wǎng)站今日足球比賽預(yù)測(cè)推薦分析
  • wordpress 多站點(diǎn)遷移軟文寫(xiě)作模板
  • 在哪個(gè)網(wǎng)站可以做行測(cè)題長(zhǎng)春百度推廣電話(huà)
  • 合肥高端網(wǎng)站建設(shè)設(shè)計(jì)免費(fèi)海報(bào)模板網(wǎng)站
  • 廈門(mén)SEO_廈門(mén)網(wǎng)站建設(shè)長(zhǎng)春網(wǎng)站關(guān)鍵詞排名
  • 企業(yè)網(wǎng)站的推廣形式有哪些中國(guó)軟文網(wǎng)官網(wǎng)
  • 有沒(méi)有做網(wǎng)站的軟件百度快照是什么
  • 貸款超市網(wǎng)站開(kāi)發(fā)sem優(yōu)化服務(wù)公司
  • 如何自己做網(wǎng)站知識(shí)網(wǎng)絡(luò)營(yíng)銷(xiāo)類(lèi)型
  • 廣州專(zhuān)業(yè)網(wǎng)站建設(shè)性?xún)r(jià)比高google學(xué)術(shù)搜索
  • 佛山建站公司哪家好騰訊云域名注冊(cè)
  • 畢業(yè)設(shè)計(jì)做網(wǎng)站lowseo查詢(xún)軟件
  • 河南網(wǎng)站建設(shè)價(jià)位柳州網(wǎng)站建設(shè)哪里有
  • 自己做網(wǎng)站申請(qǐng)域名百度廣告電話(huà)號(hào)碼是多少
  • 網(wǎng)站代碼優(yōu)化方法廣州信息流推廣公司排名
  • 空濾網(wǎng)站怎么做百度網(wǎng)站排名規(guī)則
  • 企業(yè)網(wǎng)站優(yōu)化方案模板免費(fèi)發(fā)布廣告
  • 晉中路橋建設(shè)集團(tuán)有限公司網(wǎng)站公司想做網(wǎng)絡(luò)推廣貴不
  • 在上面網(wǎng)站上可以做統(tǒng)計(jì)圖亞馬遜市場(chǎng)營(yíng)銷(xiāo)案例分析
  • 楚風(fēng)網(wǎng)站建設(shè)工作室網(wǎng)絡(luò)公司網(wǎng)站
  • 自己制作wordpress plugin網(wǎng)站 seo
  • 上海嘉定網(wǎng)站百度網(wǎng)訊科技有限公司官網(wǎng)
  • 屋頂平臺(tái)設(shè)計(jì)效果圖大全淘寶優(yōu)化
  • 單頁(yè)面營(yíng)銷(xiāo)型網(wǎng)站制作網(wǎng)絡(luò)推廣方法有哪些
  • 包包網(wǎng)站建設(shè)可行性分析網(wǎng)店運(yùn)營(yíng)培訓(xùn)哪里好
  • 成都免費(fèi)招聘網(wǎng)站溫州seo推廣外包
  • 網(wǎng)站單獨(dú)頁(yè)面怎么做301重定向小紅書(shū)關(guān)鍵詞檢測(cè)
  • 中職示范校建設(shè)網(wǎng)站凡科建站怎么用
  • 騰訊云做網(wǎng)站干什么用優(yōu)化防控措施
  • 網(wǎng)站建設(shè) 軟件開(kāi)發(fā)的公司排名晚上國(guó)網(wǎng)app