返回顶部
首页 > 资讯 > 精选 >Semaphore怎么使用
  • 560
分享到

Semaphore怎么使用

2023-06-19 10:06:56 560人浏览 薄情痞子
摘要

本篇内容介绍了“Semaphore怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!每一个成熟的开发工具,都会附带很多示例,用来说明工具

本篇内容介绍了“Semaphore怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

每一个成熟的开发工具,都会附带很多示例,用来说明工具本身和相关语言的用法。编程者往往会忽略这些例子而直奔自己的开发目标。基本上这也不是什么大问题,因为那些例子大多很简单,用的时候看一下就行了。但是Qt中关于Semaphore的实例,却是无论如何都不应该忽略的。

代码说明

全局变量

//数据量
const int DataSize = 100000;
//缓冲区大小
const int BufferSize = 8192;  
//缓冲区
char buffer[BufferSize];      
//缓冲区空闲空间Semaphore
QSemaphore freeBytes(BufferSize);  
//缓冲区数据Semaphore
QSemaphore usedBytes;         

写数据线程

class Producer : public QThread
{
public:
 void run() override
 {
      for (int i = 0; i < DataSize; ++i) {
         freeBytes.acquire();
         buffer[i % BufferSize]
               = "ACGT"[(int)qrand() % 4];
         usedBytes.release();
     }
 }
};

首先略过两个Semaphore来读程序。run方法向缓冲区中写入数据。由于buffer的下标为i % BufferSize,所以这是一个循环队列。

接下来看两个Semaphore的用法。freeBytes是空闲领域关联的Semaphore,只要循环队列中有空闲空间,acquire就会顺利通过,否则写数据线程在acquire方法处发生阻塞。当数据写入成功以后,调用usedBytes的release方法,增加usedBytes的计数值。

读数据线程

class Consumer : public QThread
{
public:
 void run() override
 {
     for (int i = 0; i < DataSize; ++i) {
         usedBytes.acquire();
         fprintf(stderr, "%c",    
                  buffer[i % BufferSize]);
         freeBytes.release();
     }
 }
};

run方法从循环队列中读数据。关键还是两个Semaphore的用法。usedBytes是数据领域关联的Semaphore,只用循环队列中有数据,acquire就会顺利通过,否则读数据线程在acquire方法处发生阻塞。当数据读出成功以后,调用freeBytes的release方法,增加freeBytes的计数值。

主程序

int main(int arGC, char *argv[])
{
 Producer producer;
 Consumer consumer;
 producer.start();
 consumer.start();
 producer.wait();
 consumer.wait();
 return 0;
}

主程序很简单,分别启动两个线程,然后就安静地等待两个线程结束。

“Semaphore怎么使用”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: Semaphore怎么使用

本文链接: https://lsjlt.com/news/295508.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Semaphore怎么使用
    本篇内容介绍了“Semaphore怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!每一个成熟的开发工具,都会附带很多示例,用来说明工具...
    99+
    2023-06-19
  • 如何使用Semaphore
    这篇文章主要讲解了“如何使用Semaphore”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何使用Semaphore”吧!基本信息姓名:Semaphore中文名:(计数)信号量出生日期:J...
    99+
    2023-06-15
  • java怎么使用Semaphore实现限流器
    这篇文章主要讲解了“java怎么使用Semaphore实现限流器”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“java怎么使用Semaphore实现限流器”吧!概念Semaphore可以看作...
    99+
    2023-06-30
  • Java怎么使用Semaphore对单接口进行限流
    这篇文章主要讲解了“Java怎么使用Semaphore对单接口进行限流”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java怎么使用Semaphore对单接口进行限流”吧!目录一、实战说明1...
    99+
    2023-06-20
  • JavaAQS信号量Semaphore的使用
    目录一.什么是Semaphore二.Semaphore的使用三.Semaphore源码分析一.什么是Semaphore Semaphore,俗称信号量,它是操作系统中PV操作的原语在...
    99+
    2023-02-02
    Java信号量Semaphore Java Semaphore Java信号量
  • Java中的Semaphore如何使用
    目录简介简述实现原理方法介绍案例分析适用场景简介 semaphore中文意思既是信号量,它的主要功能就是用来控制某个资源同时被访问的线程数。 为了控制某块资源的并发访问量时,可以使用...
    99+
    2024-04-02
  • JavaCountDownLatch与CyclicBarrier及Semaphore使用教程
    目录CountDownLatchCyclicBarrierSemaphoreCountDownLatch CountDownLatch是一个倒数的计数器阀门,初始化时阀门关闭,指定计...
    99+
    2023-01-04
    Java CountDownLatch Java CyclicBarrier Java Semaphore
  • 如何在Java中使用Semaphore工具类
    这篇文章将为大家详细讲解有关如何在Java中使用Semaphore工具类,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。一、Semaphore的理解Semaphore属于java.util.c...
    99+
    2023-06-15
  • Java并发编程之Semaphore的使用简介
    目录简介Semaphored的使用构造方法核心方法示例使用Semaphore实现互斥简介 Semaphore是用来限制访问特定资源的并发线程的数量,相对于内置锁synchroniz...
    99+
    2024-04-02
  • Java使用Semaphore对单接口进行限流
    目录一、实战说明 1.1 效果说明 1.2 核心知识点 二、 环境搭建 三、限流演示3.1 并发请求工具3.2 效果示例图一、实战说明 1.1 效果说明 本篇主要讲如何...
    99+
    2024-04-02
  • 如何使用Java高并发编程之Semaphore
    本篇内容主要讲解“如何使用Java高并发编程之Semaphore”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何使用Java高并发编程之Semaphore”吧!共享锁、独占锁学习semapho...
    99+
    2023-06-15
  • Java多线程Semaphore工具的使用详解
    目录Semaphore 是一种用于控制线程并发访问数的同步工具。它通过维护一定数量的许可证来限制对共享资源的访问。 许可证的数量就是可以同时访问共享资源的线程数目。 当一个线程需要访...
    99+
    2023-05-19
    Java 多线程 Java Semaphore
  • 什么是信号量Semaphore
    这篇文章将为大家详细讲解有关什么是信号量Semaphore,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。本质就是 信号量模型,模型图如下:其中的 计数器 和...
    99+
    2024-04-02
  • Linux中的semaphore是什么
    这篇文章给大家分享的是有关Linux中的semaphore是什么的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Semaphore 通常我们叫它信号量, 可以用来控制同时访问特定资源的线程数量,通过协调各个线程,以...
    99+
    2023-06-28
  • Java并发编程之工具类Semaphore的使用
    一、Semaphore的理解 Semaphore属于java.util.concurrent包; Semaphore翻译成字面意思为信号量,Semaphore可以控...
    99+
    2024-04-02
  • 详解Java信号量Semaphore的原理及使用
    目录1.Semaphore的概述2.Semaphore的原理2.1 基本结构2.2 可中断获取信号量2.3 不可中断获取信号量2.4 超时可中断获取信号量2.5 尝试获取信号量2.6...
    99+
    2024-04-02
  • 怎么在java中利用Semaphore实现一个限流器
    怎么在java中利用Semaphore实现一个限流器?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Java可以用来干什么Java主要应用于:1. web开发;2...
    99+
    2023-06-14
  • Java多线程如何使用Semaphore实现信号灯
    这篇文章主要讲解了“Java多线程如何使用Semaphore实现信号灯”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java多线程如何使用Semaphore实现信号灯”吧!前言:Semaph...
    99+
    2023-06-25
  • 怎么解决InnoDB的Warning: a long semaphore wai问题
    本篇内容主要讲解“怎么解决InnoDB的Warning: a long semaphore wai问题”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么解决In...
    99+
    2024-04-02
  • 怎么看待Linux 多线程中的信号量Semaphore
    今天就跟大家聊聊有关怎么看待Linux 多线程中的信号量Semaphore,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。理解 Semaphore,从一个好的翻译开始Semaphore...
    99+
    2023-06-15
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作