当前位置: 首页 > wzjs >正文

apache 本地网站网络推广的方式有哪些?

apache 本地网站,网络推广的方式有哪些?,网站治做啊app,兰州市城乡和住房建设局网站目录 1. 信号量的概念 2. POSIX 信号量相关函数 初始化信号量 :sem_init 获取信号量 :sem_wait 释放信号量 : sem_post 销毁信号量 :sem_destroy 3. 示例代码 POSIX 信号量是 POSIX 操作系统标准定义的一种同步原语&#x…

        

目录

1. 信号量的概念

2. POSIX 信号量相关函数

初始化信号量 :sem_init

获取信号量 :sem_wait

释放信号量 : sem_post

销毁信号量 :sem_destroy

3. 示例代码


POSIX 信号量是 POSIX 操作系统标准定义的一种同步原语,用于多线程(以及多进程)环境中的同步与互斥操作。在多线程编程中,POSIX 信号量有助于控制对共享资源的访问,防止竞态条件的发生。

1. 信号量的概念

        信号量本质上是一个整型变量,它通过一个计数器来控制对共享资源的访问。当线程需要访问共享资源时,它会尝试获取信号量(将计数器减 1)。如果计数器的值大于 0,获取操作成功,线程可以继续执行;如果计数器的值为 0,线程将被阻塞,直到其他线程释放信号量(将计数器加 1)。

2. POSIX 信号量相关函数

初始化信号量 :sem_init
  • 函数原型
    int sem_init(sem_t *sem, int pshared, unsigned int value);
    
  • 功能:初始化一个未命名的信号量。
  • 参数
    • sem:指向要初始化的信号量变量的指针。
    • pshared:用于指定信号量的共享方式。如果 pshared 的值为 0,表示这个信号量是当前进程内的线程共享;如果 pshared 非 0,表示这个信号量可以在多个进程间共享(常用于进程间通信场景)。在多线程场景中,通常设置为 0。
    • value:指定信号量的初始值。这个值表示可用资源的数量。例如,如果 value 为 1,通常用于实现互斥锁(因为同一时间只允许一个线程获取信号量,即只有一个线程能访问共享资源);如果 value 大于 1,则可以允许多个线程同时访问共享资源,具体数量由 value 决定。
  • 返回值:成功时返回 0,失败时返回 -1,并设置 errno 以指示错误原因,如 EINVAL(无效的参数)或 ENOMEM(内存不足)。
获取信号量 :sem_wait
  • 函数原型
    int sem_wait(sem_t *sem);
    
  • 功能:尝试获取信号量。如果信号量的值大于 0,函数将信号量的值减 1,然后返回,调用线程可以继续执行;如果信号量的值为 0,调用线程会被阻塞,直到信号量的值变为大于 0。
  • 参数sem 指向要操作的信号量变量的指针。
  • 返回值:成功时返回 0,失败时返回 -1,并设置 errno 来表示错误原因,如 EINTR(操作被信号中断)。
释放信号量 : sem_post
  • 函数原型
    int sem_post(sem_t *sem);
    
  • 功能:释放信号量,将信号量的值加 1。如果有其他线程正在等待该信号量(即信号量的值为 0 且有线程在 sem_wait 中阻塞),则会唤醒其中一个等待线程,使其能够获取信号量并继续执行。
  • 参数sem 指向要操作的信号量变量的指针。
  • 返回值:成功时返回 0,失败时返回 -1,并设置 errno 指示错误原因,如 EINVAL(无效的信号量)。
销毁信号量 :sem_destroy
  • 函数原型
    int sem_destroy(sem_t *sem);
    
  • 功能:销毁一个已初始化的信号量,释放与之相关的所有资源。在销毁信号量之前,应确保没有线程正在等待该信号量,并且所有对该信号量的操作已经完成。
  • 参数sem 指向要销毁的信号量变量的指针。
  • 返回值:成功时返回 0,失败时返回 -1,并设置 errno 指示错误原因,如 EBUSY(信号量正在被使用)。

3. 示例代码

#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <semaphore.h>// 定义共享资源和信号量
int shared_resource = 0;
sem_t semaphore;// 线程函数
void* increment_shared_resource(void* arg) {// 获取信号量sem_wait(&semaphore);shared_resource++;printf("Thread incremented shared_resource to %d\n", shared_resource);// 释放信号量sem_post(&semaphore);return NULL;
}int main() {const int num_threads = 5;pthread_t threads[num_threads];// 初始化信号量if (sem_init(&semaphore, 0, 1) != 0) {perror("Semaphore initialization failed");return 1;}// 创建线程for (int i = 0; i < num_threads; i++) {if (pthread_create(&threads[i], NULL, increment_shared_resource, NULL) != 0) {perror("Thread creation failed");return 1;}}// 等待所有线程完成for (int i = 0; i < num_threads; i++) {if (pthread_join(threads[i], NULL) != 0) {perror("Thread join failed");return 1;}}// 销毁信号量sem_destroy(&semaphore);return 0;
}

http://www.dtcms.com/wzjs/376381.html

相关文章:

  • 做航模的网站关键词歌词林俊杰
  • 建设银行深圳天健世纪支行网站网站建设优化推广
  • 专业营销网站国家卫健委最新疫情报告
  • 品牌vi设计一般多少钱怎么样优化网站seo
  • 做网站价格miniuinet外贸营销型网站建设公司
  • 哪个网站可以做翻译赚钱销售方案
  • 做推文的网站外贸网站有哪些
  • 宁远县做网站的巨量算数数据分析入口
  • 移动电子商务网站设计网站搜索优化方法
  • 购物网站策划书谷歌收录查询工具
  • 廉江市住房和城乡规划建设局网站河南郑州最新事件
  • 隆尧网站建设怎样做网络推广挣钱
  • 苏州区建设局网站互联网营销培训平台
  • 旧房装修找哪家seo优化内容
  • 英语营销型网站建设网络营销是什么专业类别
  • wordpress 显示阅读数seo网络推广技术员招聘
  • 028网站建设国产免费crm系统有哪些在线
  • 阿里巴巴网站怎么做推广方案2023年百度小说风云榜
  • 南昌网站推广¥做下拉去118cr网站排名提升软件
  • 免费自学网网站性能优化的方法有哪些
  • 用字母做logo的网站西安网站定制开发
  • 企业宣传片多少钱一分钟高端网站优化公司
  • 贵阳网站制作维护河南品牌网站建设
  • 建立电子商务网站目的线上推广引流渠道
  • 自媒体平台哪家好东莞seo培训
  • 遵义市做网站设计公司提供搜索引擎优化公司
  • 婚恋网站需求分析博客营销案例
  • 夜夜夜在线观看太仓seo网站优化软件
  • 电子商务网站建设实验总结优化大师哪个好
  • 郑州哪有做网站的php搭建一个简单的网站