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

工艺品网站设计天津公共资源交易平台官网

工艺品网站设计,天津公共资源交易平台官网,网站推广方式,企业黄页的含义是什么如果有十个银行账号通过不同的十条线程同时向同一个账号转账时,如果没有很好的机制保证十个账号依次存入,那么这些转账可能出问题。我们可以通过互斥量来解决。 C标准库提供了这个互斥量,只需要引入threads.头文件。 互斥量就像是一把锁&am…

如果有十个银行账号通过不同的十条线程同时向同一个账号转账时,如果没有很好的机制保证十个账号依次存入,那么这些转账可能出问题。我们可以通过互斥量来解决。

C标准库提供了这个互斥量,只需要引入threads.头文件。

互斥量就像是一把锁,在一个线程在访问某个共享资源前,需要对互斥量进行加锁操作,其他线程想要对互斥量加锁就会被阻塞,直到当前线程释放该锁。当锁被释放后,被阻塞的线程都开始继续执行,并再次重复前面的步骤,开始争夺可以对互斥量进行加锁的操作。

互斥量这种方式,可以保证每次只有一个线程在操作共享资源。例子如下:

#include <threads.h>
#include <stdio.h>
#define THREAD_COUNT 10
#define THREAD_LOOP 100000000
mtx_t mutex;//全局互斥量对象
long counter = 0;
int run(void *arg){for(int i = 0; i < THREAD_LOOP; i++){mtx_lock(&mutex); // 对互斥量进行加锁counter++; // 共享资源mtx_unlock(&mutex); // 释放锁}printf("Thread %d terminates.\n",*((int*)arg));return thrd_success;
}int main(void){
#ifndef __STDC_NO_THREADS__int ids[THREAD_COUNT];mtx_init(&mutex,mtx_plain);//创建一把锁thrd_t threads[THREAD_COUNT];for(int i = 0; i < THREAD_COUNT; i++){ids[i] = i+1;thrd_create(&threads[i],run,ids+i);//创建线程}for(int i = 0; i < THREAD_COUNT; i++){thrd_join(threads[i],NULL);//等待所有线程执行完成}printf("Counter value is: %ld.\n",counter);mtx_destroy(&mutex);//销毁互斥量对象
#endifreturn 0;
}
~/Desktop$ gcc mtx.c -o mtx
kyunban@kyunban-Parallels-ARM-Virtual-Machine:~/Desktop$ ./mtx
Thread 9 terminates.
Thread 5 terminates.
Thread 8 terminates.
Thread 1 terminates.
Thread 6 terminates.
Thread 7 terminates.
Thread 3 terminates.
Thread 2 terminates.
Thread 4 terminates.
Thread 10 terminates.
Counter value is: 1000000000.

在C语言中,互斥量有三种:

  • mtx_plain :最为简单的互斥量,可对其进行基本的加锁和解锁操作,但不适合需要重复加锁的场景,如在递归调用中,即使当前线程拥有该锁,但对同一个mtx_plain互斥量重复加锁也会导致当前线程被阻塞,从而导致死锁问题(因为当前线程想要加锁就要先等待自己释放锁,而要让当前线程释放锁,就要先要它加锁成功,完成对共享资源的操作后,才能够释放锁,如此一来就是一个无解的问题,死锁就形成了),对于递归调用中要用到锁的场景,可以使用mtx_recursive
  • mtx_recursive:也被称为可重入互斥量,它可以被同一个线程重复锁定多次,而不会阻塞线程,相应地,要对它进行相应多次mtx_unlock才能够完全解锁。
  • mtx_timed:需要配合mtx_timedlock函数一起使用,线程尝试给对应的互斥量加锁时,会以阻塞的方式等待一定时间,若超过给定的时间后仍未给互斥量成功上锁,则线程继续执行。

C标准库还提供了以下两个与“互斥”有关的函数:

  • call_once:只调用指定方法一次,即使它在多个线程中被调用。
  • mtx_trylock:锁住指定互斥量或直接返回
http://www.yayakq.cn/news/678836/

相关文章:

  • 做磨毛布内销哪个网站比较好青岛网站建设方案咨询
  • 西安SEO网站建设哪家好安平网站建设找盛千
  • 织梦做泰文网站基金公司网站建设
  • 网站建设的规划和流程坪山网站制作
  • 北京网站建设加q.479185700襄阳大摩网站建设
  • 网站建设咨询有客诚信网站建设咨询足球比赛直播间在线观看
  • 网站如何做404页面建设培训网站
  • php网站开发软件外贸访问国外网站
  • php网站是什么信用体系建设网站维运工作制度
  • 做二手货车网站做网站收获了什么
  • 2024免费推广网站塑胶原料东莞网站建设
  • 公司网站建设需要资质南阳网站排名优化公司
  • 文化建设网站wordpress 每页 关高
  • 网站备案要关站吗河南网站优化哪家好
  • 电子商务网站规划、电子商务网站建设网站开发运营策划案
  • 公司想做网站跳转网站怎么做的
  • 网站数据库建表免费做游戏小程序的网站
  • 建设银行社保卡查询网站动画视频怎么制作出来的
  • 网站做外链好不好商务网站运营与管理
  • python+视频播放网站开发安卓studio制作一个简单app
  • 仿站多少钱一套泰兴网站优化
  • 重型机械网站开发模版wordpress插件漏洞扫描
  • 河南睢县筑宇建设网站js网站模板免费下载
  • 宁波网站建设方式在线培训系统平台
  • 网站有域名用注册商标吗网络推广培训论坛
  • 如何做企业网站的更新域名空间商
  • 新闻类wordpress模板下载广州网站优化工具
  • 免费搭建网站的软件榆林 网站建设
  • 常德市网站建设做个商城网站多少钱
  • 网站布局怎么设计网站开发与网站设计区别