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

网站正在建设中 源码百度官方优化指南

网站正在建设中 源码,百度官方优化指南,新浪云虚拟主机做电影网站,李贤威wordpress建站教程文章目录线程的信号量初始化信号量:sem_init减少信号量:sem_wait增加信号量:sem_post删除信号量:sem_destroy代码示例线程的互斥量初始化互斥量:pthread_mutex_init锁住互斥量:pthread_mutex_lock解锁互斥量…

文章目录

  • 线程的信号量
    • 初始化信号量:sem_init
    • 减少信号量:sem_wait
    • 增加信号量:sem_post
    • 删除信号量:sem_destroy
    • 代码示例
  • 线程的互斥量
    • 初始化互斥量:pthread_mutex_init
    • 锁住互斥量:pthread_mutex_lock
    • 解锁互斥量:pthread_mutex_unlock
    • 销毁互斥量:pthread_mutex_destroy
    • 代码示例

线程的信号量

原理简介:

线程的信号量和进程的类似,维护一个sem_t类型(本质是一个int类型的)的信号量,不同线程通过判断信号量的值,来决定是否进行继续运行,从而控制线程运行的先后顺序。比如信号量初始化成0,线程1调用sem_wait阻塞住,等待线程2调用sem_post将限号量增加之后,线程1被唤醒,从而实现线程1、2执行的顺序。

使用流程:

  1. sem_init初始化信号量
  2. sem_post增加信号量
  3. sem_wait判断并减少信号量

初始化信号量:sem_init

sem_init用于初始化信号量的初始值和作用范围。

#include <semaphore.h>
int sem_init(sem_t *sem, int pshared, unsigned int value);
Link with -pthread;
sem: 需要被初始化的信号量对象;
value: 初始值;
pshared: 10,表示信号量线程共享,多线程可以共同操作该信号量,要求sem变量的作用域能被多个线程访问到;2)非0,表示信号量进程共享,多进程可以共同操作该信号量,如果是父子进程,要求sem变量的作用域能被多个进程访问到,若父子进程,则可以直接访问,若没有关系的进程,那么sem要在共享内存中创建;
返回值: 成功,返回0;失败,返回-1,并置上errno;

减少信号量:sem_wait

sem_wait函数判断信号量是否大于0,如果大于0,则将信号量减一,并且立即返回,如果小于等于0,就阻塞在该函数,直到信号量大于0。

#include <semaphore.h>
int sem_wait(sem_t *sem);
sem: 待操作的信号量;
返回值: 成功,返回0;失败,返回-1,并置上errno

增加信号量:sem_post

sem_post用于给信号量加1

#include <semaphore.h>
int sem_post(sem_t *sem);
sem: 待操作的信号量;
返回值: 成功,返回0;失败,返回-1,并置上errno 

删除信号量:sem_destroy

#include <semaphore.h>
int sem_destroy(sem_t *sem);
sem: 待操作的信号量;
返回值: 成功,返回0;失败,返回-1,并置上errno

代码示例

线程1先被创建,但是阻塞在信号量上,线程2后被创建,被运行后将信号量增加,然后线程1识别到信号量大于零,才执行后面的步骤。

#include <semaphore.h>
#include <stdio.h>
#include <pthread.h>
#include <unistd.h>sem_t sem;void * func1(void *arg)
{int ret;ret = sem_wait(&sem);if (ret != 0) {perror("sem_wait: ");return NULL;}printf("%s: pthread id: %ul\n", __func__, pthread_self());
}void * func2(void *arg)
{int ret;printf("%s: pthread id: %ul\n", __func__, pthread_self());ret = sem_post(&sem);if (ret != 0) {perror("sem_post: ");return NULL;}
}int
main(int argc, char **argv)
{int ret;pthread_t p1, p2;ret = sem_init(&sem, 0, 0);if (ret < 0) {perror("sem_init: ");return -1;}ret = pthread_create(&p1, NULL, &func1, NULL);if (ret != 0) {perror("pthread_create: ");return -1;}sleep(5);ret = pthread_create(&p2, NULL, &func2, NULL);if (ret != 0) {perror("pthread_create: ");return -1;}sleep(1);return 0;}

线程的互斥量

原理简介:

  • 互斥量底层也是通过锁实现的,第一个线程访问互斥量的时候对互斥量加锁,后续线程加锁互斥量的时候会被阻塞,直到锁被释放
  • 互斥量在POSIX中定义
  • 互斥量是一种特殊的信号量,信号量是一个int数值,可以随意大小,互斥量只有0和1

使用流程:

  1. 初始化互斥量
  2. 锁住互斥量
  3. 解锁互斥量
  4. 销毁互斥量

初始化互斥量:pthread_mutex_init

互斥量用之前必须初始化:

//初始化方法1:使用默认属性,必须在定义的时候初始化,不可以先定义后初始化
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
//初始化方法2:
#include <pthread.h>
int pthread_mutex_init(pthread_mutex_t *restrict mutex,const pthread_mutexattr_t *restrict attr);
mutex: 待初始化的互斥量;
attr: 参数,可以直接使用NULL;
返回值: 成功,返回0,失败,返回非0,并置上errno

锁住互斥量:pthread_mutex_lock

#include <pthread.h>
int pthread_mutex_lock(pthread_mutex_t *mutex);
mutex: 待锁住的互斥量;
返回值: 成功,返回0,失败,返回非0,并置上errno

解锁互斥量:pthread_mutex_unlock

#include <pthread.h>
int pthread_mutex_unlock(pthread_mutex_t *mutex);
mutex: 待解锁的互斥量;
返回值: 成功,返回0,失败,返回非0,并置上errno;

销毁互斥量:pthread_mutex_destroy

互斥量用完了之后要释放

#include <pthread.h>
int pthread_mutex_destroy(pthread_mutex_t *mutex);
mutex: 待销毁的互斥量;
返回值: 成功,返回0,失败,返回非0,并置上errno;

代码示例

#include <stdio.h>
#include <pthread.h>
#include <unistd.h>pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;void * func1(void *arg)
{int ret;ret = pthread_mutex_lock(&mutex);if (ret != 0){perror("pthread_mutex_lock: ");return NULL;}printf("%s: pthread id: %ul\n", __func__, pthread_self());pthread_mutex_destroy(&mutex);
}void * func2(void *arg)
{int ret;printf("%s: pthread id: %ul\n", __func__, pthread_self());
}int
main(int argc, char **argv)
{int ret;pthread_t p1, p2;//ret = pthread_mutex_init(&mutex, NULL);//if (ret != 0) {//      perror("pthread_mutex_init: ");//      return -1;//}ret = pthread_mutex_lock(&mutex);if (ret != 0){perror("pthread_mutex_lock: ");return -1;}ret = pthread_create(&p1, NULL, &func1, NULL);if (ret != 0) {perror("pthread_create: ");return -1;}sleep(5);ret = pthread_create(&p2, NULL, &func2, NULL);if (ret != 0) {perror("pthread_create: ");return -1;}sleep(1);ret = pthread_mutex_unlock(&mutex);if (ret != 0){perror("pthread_mutex_lock: ");return -1;}sleep(1);return 0;
}

文章转载自:
http://dinncopromorphology.knnc.cn
http://dinncodespoilment.knnc.cn
http://dinncoallocate.knnc.cn
http://dinncorend.knnc.cn
http://dinncolindane.knnc.cn
http://dinncobloviate.knnc.cn
http://dinncomatey.knnc.cn
http://dinncoventriloquy.knnc.cn
http://dinncoragamuffin.knnc.cn
http://dinnconidify.knnc.cn
http://dinncosuperpersonality.knnc.cn
http://dinncobulbospongiosus.knnc.cn
http://dinncoanabolic.knnc.cn
http://dinncocerebrate.knnc.cn
http://dinncomagnifier.knnc.cn
http://dinncokaliph.knnc.cn
http://dinncocontestant.knnc.cn
http://dinncocaprifig.knnc.cn
http://dinncorabbinist.knnc.cn
http://dinncoulsterite.knnc.cn
http://dinncoswimmer.knnc.cn
http://dinncozoologic.knnc.cn
http://dinncopolycistronic.knnc.cn
http://dinncoarctic.knnc.cn
http://dinncoyacht.knnc.cn
http://dinncolothsome.knnc.cn
http://dinncofinis.knnc.cn
http://dinncoruwenzori.knnc.cn
http://dinncoteenage.knnc.cn
http://dinncocircuitousness.knnc.cn
http://dinncoinducer.knnc.cn
http://dinncotelex.knnc.cn
http://dinncodrowsiness.knnc.cn
http://dinnconeanderthal.knnc.cn
http://dinncotrillium.knnc.cn
http://dinncodebris.knnc.cn
http://dinncotask.knnc.cn
http://dinncoassibilation.knnc.cn
http://dinncopoliter.knnc.cn
http://dinncoscintillant.knnc.cn
http://dinncosciolous.knnc.cn
http://dinncoashikaga.knnc.cn
http://dinncotestudinal.knnc.cn
http://dinncometayage.knnc.cn
http://dinncoxenia.knnc.cn
http://dinncohorn.knnc.cn
http://dinncoscalable.knnc.cn
http://dinncofacilely.knnc.cn
http://dinncoretentivity.knnc.cn
http://dinncobaku.knnc.cn
http://dinncoduplation.knnc.cn
http://dinncoalkalinization.knnc.cn
http://dinncolascivious.knnc.cn
http://dinncocienaga.knnc.cn
http://dinncobacterial.knnc.cn
http://dinncoforgivingly.knnc.cn
http://dinncoxylanthrax.knnc.cn
http://dinncohoarsen.knnc.cn
http://dinncopaddlesteamer.knnc.cn
http://dinncodeathtrap.knnc.cn
http://dinncopiggin.knnc.cn
http://dinncosepulchre.knnc.cn
http://dinncodisclose.knnc.cn
http://dinncoaccordant.knnc.cn
http://dinncolongyi.knnc.cn
http://dinncokeratosis.knnc.cn
http://dinncopromissory.knnc.cn
http://dinncotremblant.knnc.cn
http://dinncoconcision.knnc.cn
http://dinncoexomphalos.knnc.cn
http://dinncoempyreuma.knnc.cn
http://dinncowhoosy.knnc.cn
http://dinncorustling.knnc.cn
http://dinncovend.knnc.cn
http://dinncofeminal.knnc.cn
http://dinncomarquesa.knnc.cn
http://dinncopiracy.knnc.cn
http://dinncosemisubterranean.knnc.cn
http://dinncojetfoil.knnc.cn
http://dinncobardia.knnc.cn
http://dinncoredeceive.knnc.cn
http://dinncowalsall.knnc.cn
http://dinncoardeidae.knnc.cn
http://dinncohemophile.knnc.cn
http://dinncobakelite.knnc.cn
http://dinncoasceticism.knnc.cn
http://dinncorowing.knnc.cn
http://dinncomarinescape.knnc.cn
http://dinncomfab.knnc.cn
http://dinncoanchoret.knnc.cn
http://dinncofamiliarly.knnc.cn
http://dinncosocialism.knnc.cn
http://dinncofrippery.knnc.cn
http://dinncobulawayo.knnc.cn
http://dinncomackintosh.knnc.cn
http://dinncoantarctica.knnc.cn
http://dinncopentode.knnc.cn
http://dinncohomomorphism.knnc.cn
http://dinncobenefit.knnc.cn
http://dinncohemline.knnc.cn
http://www.dinnco.com/news/96481.html

相关文章:

  • 大连网站建设培训班财经新闻最新消息
  • wordpress做过的大型网站系统优化app
  • 绩效考核表 网站建设电商网站模板
  • 中国网站开发的前景营销策划
  • 织梦网站栏目是做什么用的软文发稿
  • 廊坊做网站的电话百度百科入口
  • 做网站大公司还是小公司广告网站有哪些
  • 用ps做网站主页独立站建站需要多少钱
  • 北京婚恋网站哪家最好教育机构退费纠纷找谁
  • 高端手机网站 制作公司长春seo代理
  • 专业做网站+上海营销策略包括哪些方面
  • 做网站需要画草图高端品牌网站建设
  • 哪个网站做二手车买卖网站维护的主要内容
  • 电商网站商品表设计方案什么是百度快照
  • 网站web做如何建立一个网站
  • 网站怎么做三级的网站内部优化有哪些内容
  • 网站推广方案编写巢湖网站制作
  • 南宁如何做百度的网站今日小说排行榜百度搜索榜
  • 网站备案有什么作用济南做网站公司
  • 菏泽做网站建设找哪家好seo工程师是做什么的
  • wordpress网站上线口碑营销什么意思
  • 营销类网站建营销类网站建设网站联盟推广
  • 国务院网站建设标准地推网app推广平台
  • 大连网站建设微信群广东seo网站推广代运营
  • 深圳网站建设设计百度百科官网首页
  • 网站建设全程揭秘pdf免费推广方式都有哪些
  • wordpress多媒体导入扬州百度关键词优化
  • 网站建设与管理工资百度指数的主要功能有
  • 郑州做景区网站建设公司seo培训费用
  • 朝城做网站公司南宁seo怎么做优化团队