wordpress修复,网站推广seo系统,西安网站漏洞,软文广告是什么322、循环队列、信号量、生产/消费者模型的源代码 一、demo1.cpp // demo1.cpp#xff0c;本程序演示循环队列的使用。 #include _public.h int main() { using ElemTypeint; squeueElemType,5 QQ; ElemType ee; // 创建一个数据元素。 cout 本程序演示循环队列的使用。 #include _public.h int main() { using ElemTypeint; squeueElemType,5 QQ; ElemType ee; // 创建一个数据元素。 cout 元素1、2、3入队。\n; ee1; QQ.push(ee); ee2; QQ.push(ee); ee3; QQ.push(ee); cout 队列的长度是 QQ.size() endl; QQ.printqueue(); eeQQ.front(); QQ.pop(); cout 出队的元素值为 ee endl; eeQQ.front(); QQ.pop(); cout 出队的元素值为 ee endl; cout 队列的长度是 QQ.size() endl; QQ.printqueue(); cout 元素11、12、13、14、15入队。\n; ee11; QQ.push(ee); ee12; QQ.push(ee); ee13; QQ.push(ee); ee14; QQ.push(ee); ee15; QQ.push(ee); cout 队列的长度是 QQ.size() endl; QQ.printqueue(); } 二、demo2.cpp // demo2.cpp本程序演示基于共享内存的循环队列。 #include _public.h int main() { using ElemTypeint; // 初始化共享内存。 int shmidshmget(0x5005, sizeof(squeueElemType,5), 0640|IPC_CREAT); if ( shmid -1 ) { cout shmget(0x5005) failed.\n; return -1; } // 把共享内存连接到当前进程的地址空间。 squeueElemType,5 *QQ(squeueElemType,5 *)shmat(shmid,0,0); if ( QQ(void *)-1 ) { cout shmat() failed\n; return -1; } QQ-init(); // 初始化循环队列。 ElemType ee; // 创建一个数据元素。 cout 元素1、2、3入队。\n; ee1; QQ-push(ee); ee2; QQ-push(ee); ee3; QQ-push(ee); cout 队列的长度是 QQ-size() endl; QQ-printqueue(); eeQQ-front(); QQ-pop(); cout 出队的元素值为 ee endl; eeQQ-front(); QQ-pop(); cout 出队的元素值为 ee endl; cout 队列的长度是 QQ-size() endl; QQ-printqueue(); cout 元素11、12、13、14、15入队。\n; ee11; QQ-push(ee); ee12; QQ-push(ee); ee13; QQ-push(ee); ee14; QQ-push(ee); ee15; QQ-push(ee); cout 队列的长度是 QQ-size() endl; QQ-printqueue(); shmdt(QQ); // 把共享内存从当前进程中分离。 } 三、demo3.cpp // demo3.cpp本程序演示用信号量给共享内存加锁。 #include _public.h struct stgirl // 超女结构体。 { int no; // 编号。 char name[51]; // 姓名注意不能用 string。 }; int main(int argc,char *argv[]) { if (argc!3) { cout Using:./demo no name\n; return -1; } // 第 1 步创建/获取共享内存键值 key 为 0x5005也可以用其它的值。 int shmidshmget(0x5005, sizeof(stgirl), 0640|IPC_CREAT); if ( shmid -1 ) { cout shmget(0x5005) failed.\n; return -1; } cout shmid shmid endl; // 第 2 步把共享内存连接到当前进程的地址空间。 stgirl *ptr(stgirl *)shmat(shmid,0,0); if ( ptr(void *)-1 ) { cout shmat() failed\n; return -1; } // 创建、初始化二元信号量。 csemp mutex; if (mutex.init(0x5005)false) { cout mutex.init(0x5005) failed.\n; return -1; } cout 申请加锁...\n; mutex.wait(); // 申请加锁。 cout 申请加锁成功。\n; // 第 3 步使用共享内存对共享内存进行读/写。 cout 原值no ptr-no ,name ptr-name endl; // 显示共享内存 中的原值。 ptr-noatoi(argv[1]); // 对超女结构体的 no 成员赋值。 strcpy(ptr-name,argv[2]); // 对超女结构体的 name 成员赋值。 cout 新值no ptr-no ,name ptr-name endl; // 显示共享内存 中的当前值。 sleep(10); mutex.post(); // 解锁。 cout 解锁。\n; // 查看信号量 ipcs -s // 删除信号量 ipcrm sem 信号量 id // 查看共享内存ipcs -m // 删除共享内存ipcrm -m 共享内存 id // 第 4 步把共享内存从当前进程中分离。 shmdt(ptr); // 第 5 步删除共享内存。 //if (shmctl(shmid,IPC_RMID,0)-1) //{ // cout shmctl failed\n; return -1; //} }