中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

ps做網(wǎng)站大小尺寸短視頻seo推廣隱迅推專業(yè)

ps做網(wǎng)站大小尺寸,短視頻seo推廣隱迅推專業(yè),如何做網(wǎng)站alexa排名,網(wǎng)上接單 網(wǎng)站建設(shè)### 循環(huán)隊列和阻塞隊列 #### 循環(huán)隊列 - **定義**: 一個固定大小的數(shù)組,通過兩個指針(front 和 back)管理隊列的頭部和尾部元素。 - **特點**: - **循環(huán)性**: 當(dāng)指針到達數(shù)組的末尾時,可以回繞到數(shù)組的開頭,從而利…

### 循環(huán)隊列和阻塞隊列

#### 循環(huán)隊列
- **定義**: 一個固定大小的數(shù)組,通過兩個指針(`front` 和 `back`)管理隊列的頭部和尾部元素。
- **特點**:
? - **循環(huán)性**: 當(dāng)指針到達數(shù)組的末尾時,可以回繞到數(shù)組的開頭,從而利用數(shù)組的全部空間。
? - **空間效率**: 使用固定大小的數(shù)組,避免了動態(tài)內(nèi)存分配和釋放帶來的開銷。

#### 阻塞隊列
- **定義**: 一種線程安全的隊列,在隊列為空時嘗試出隊的線程會被阻塞,在隊列已滿時嘗試入隊的線程也會被阻塞。
- **特點**:
? - **線程安全**: 使用互斥鎖和條件變量來保證多線程環(huán)境下的安全訪問。
? - **阻塞機制**: 當(dāng)隊列為空或已滿時,通過條件變量阻塞相應(yīng)的線程,直到隊列狀態(tài)發(fā)生改變。

### 阻塞隊列與生產(chǎn)者-消費者模型

#### 生產(chǎn)者-消費者模型
- **定義**: 一種經(jīng)典的多線程同步模型,通常涉及兩個角色:生產(chǎn)者和消費者。
? - **生產(chǎn)者**: 負責(zé)生產(chǎn)數(shù)據(jù)并將其放入隊列。
? - **消費者**: 負責(zé)從隊列中取出數(shù)據(jù)進行處理。
- **特點**:
? - **解耦**: 生產(chǎn)者和消費者通過共享隊列進行數(shù)據(jù)交換,彼此之間解耦。
? - **同步**: 使用阻塞隊列來實現(xiàn)生產(chǎn)者和消費者之間的同步。

### 阻塞隊列與異步日志系統(tǒng)

#### 異步日志系統(tǒng)
- **定義**: 一種日志記錄系統(tǒng),其中日志記錄操作與業(yè)務(wù)邏輯操作分離,通過異步機制提高性能。
- **特點**:
? - **非阻塞**: 業(yè)務(wù)邏輯線程將日志消息放入隊列后立即返回,而不是等待日志寫入完成。
? - **后臺處理**: 專門的日志線程從隊列中取出日志消息并寫入日志文件。

#### 阻塞隊列在異步日志系統(tǒng)中的應(yīng)用
- **隊列**: 用于存放日志消息。
- **生產(chǎn)者**: 業(yè)務(wù)邏輯線程,將日志消息放入隊列。
- **消費者**: 日志處理線程,從隊列中取出日志消息并寫入日志文件。
- **同步**: 通過阻塞隊列實現(xiàn)生產(chǎn)者和消費者的同步,確保日志消息不會丟失且處理有序。

### 代碼分析

- **構(gòu)造函數(shù)**: 初始化隊列的最大大小和內(nèi)部數(shù)組。
- **析構(gòu)函數(shù)**: 銷毀隊列,釋放內(nèi)存。
- **清空隊列**: 清空隊列內(nèi)容并重置指針。
- **檢查隊列狀態(tài)**: 判斷隊列是否為空或已滿。
- **獲取隊首和隊尾元素**: 安全地獲取隊列的首尾元素。
- **入隊和出隊操作**: 提供線程安全的入隊和出隊操作,使用條件變量實現(xiàn)阻塞機制。

總的來說,這個阻塞隊列通過互斥鎖和條件變量,實現(xiàn)了多線程環(huán)境下的安全訪問和同步機制,可以用于生產(chǎn)者-消費者模型中,實現(xiàn)高效的異步日志系統(tǒng)。

?
#ifndef BLOCK_QUEUE_H
#define BLOCK_QUEUE_H
?
#include<iostream>
#include<stdio.h>
#include<pthread.h>
#include<sys/time.h>
#include"../lock/locker.h"
?
using namespace std;
?
template<class T>
class block_queue{
public:
?
? ? /*初始化阻塞隊列*/
? ? block_queue(int max_size) {
? ? ? ? if (max_size <= 0) {
? ? ? ? ? ? exit(-1);
? ? ? ? }
?
? ? ? ? m_max_size = max_size;
? ? ? ? T* m_array = new T[max_size];
? ? ? ? m_size = 0;
? ? ? ? m_front = -1;
? ? ? ? m_back = -1;
? ? }
?
? ? /*刪除new出的T數(shù)組*/
? ? ~block_queue() {
? ? ? ? m_mutex.lock();
? ? ? ? if (m_array != NULL) {
? ? ? ? ? ? delete []m_array;
? ? ? ? }
? ? ? ? m_mutex.unlock();
? ? }
?
? ? /*清空隊列*/
? ? void clear() {
? ? ? ? m_mutex.lock();
? ? ? ? m_size = 0;
? ? ? ? m_front = -1;
? ? ? ? m_back = -1;
? ? ? ? m_mutex.unlock();
? ? }
?
? ? /*判斷隊列是否已滿*/
? ? bool full() {
? ? ? ? m_mutex.lock();
? ? ? ? if (m_size >= m_max_size) {
? ? ? ? ? ? m_mutex.unlock();
? ? ? ? ? ? return true;
? ? ? ? }
? ? ? ? m_mutex.unlock();
? ? ? ? return false;
? ? }
?
? ? /*判斷隊列是否為空*/
? ? bool empty() {
? ? ? ? m_mutex.lock();
? ? ? ? if (m_size == 0) {
? ? ? ? ? ? m_mutex.unlock();
? ? ? ? ? ? return true;
? ? ? ? }
? ? ? ? m_mutex.unlock();
? ? ? ? return false;
? ? }
?
? ? /*獲得隊首元素*/
? ? bool front(T &value) {
? ? ? ? m_mutex.lock();
? ? ? ? /*注意下面的if判斷不能用empty,因為empty函數(shù)也有加鎖操作,加兩次鎖會導(dǎo)致死鎖*/
? ? ? ? if (size == 0) {
? ? ? ? ? ? m_mutex.unlock();
? ? ? ? ? ? return false;
? ? ? ? }
? ? ? ? //TODO:個人感覺這行邏輯出錯,后面部分是原代碼 ?value = m_array[m_front];
? ? ? ? value = m_array[(m_front + 1) % m_max_size];
? ? ? ? m_mutex.unlock();
? ? ? ? return true;
? ? }
?
? ? /*獲得隊尾元素*/
? ? bool back(T& value) {
? ? ? ? m_mutex.lock();
? ? ? ? if (size == 0) {
? ? ? ? ? ? m_mutex.unlock();
? ? ? ? ? ? return false;
? ? ? ? }
? ? ? ? value = m_array[m_back];
? ? ? ? m_mutex.unlock();
? ? ? ? return true;
? ? }
?
? ? int size() {
? ? ? ? int tmp = 0;
? ? ? ? m_mutex.lock();
? ? ? ? tmp = m_size;
? ? ? ? m_mutex.unlock();
? ? ? ? return tmp;
? ? }
?
? ? int max_size() {
? ? ? ? int tmp = 0;
? ? ? ? m_mutex.lock();
? ? ? ? tmp = m_max_size;
? ? ? ? m_mutex.unlock();
? ? ? ? return tmp;
? ? }
?
? ? /*往隊列中添加元素前需要先將所有使用隊列的線程先喚醒*/
? ? /*阻塞隊列封裝了生產(chǎn)者消費者模型,調(diào)用push的是生產(chǎn)者,也就是工作線程*/
? ? bool push(T& item) {
? ? ? ? m_mutex.lock();
? ? ? ? if (m_size >= m_max_size) {
? ? ? ? ? ? cond.broadcast();
? ? ? ? ? ? m_mutex.unlock();
? ? ? ? ? ? return false;
? ? ? ? }
?
? ? ? ? m_back = (m_back + 1) % m_max_size;
? ? ? ? m_array[m_back] = item;
? ? ? ? m_size++;
?
? ? ? ? cond.broadcast();
? ? ? ? m_mutex.unlock();
? ? ? ? return true;
? ? }
?
? ? /*調(diào)用pop的是消費者,負責(zé)把生產(chǎn)者的內(nèi)容寫入文件*/
? ? bool pop(T& item) {
? ? ? ? m_mutex.lock();
? ? ? ? while (m_size <= 0) {
? ? ? ? ? ? if (!cond.wait(m_mutex.get())) {
? ? ? ? ? ? ? ? m_mutex.unlock();
? ? ? ? ? ? ? ? return false;
? ? ? ? ? ? }
? ? ? ? }
?
? ? ? ? m_front = (m_front + 1) % m_max_size;
? ? ? ? item = m_array[m_front];
? ? ? ? m_size--;
? ? ? ? m_mutex.unlock();
? ? ? ? return true;
? ? }
?
? ? bool pop(T& item,int ms_timeout) {
? ? ? ? struct timespec t = {0,0};//tv_sec :從1970年1月1日 0點到現(xiàn)在的秒數(shù) tv_nsec:tv_sec后面的納秒數(shù)
? ? ? ? struct timeval now = {0,0};//tv_sec: 從1970年1月1日 0點到現(xiàn)在的秒數(shù) tu_usec:tv_sec后面的微妙數(shù)
? ? ? ? gettimeofday(&now,nullptr);
? ? ? ? m_mutex.lock();
? ? ? ? if (m_size <= 0) {
? ? ? ? ? ? t.tv_sec = now.tv_sec + ms_timeout/1000;
? ? ? ? ? ? t.tv_nsec = (ms_timeout % 1000) * 1000;
? ? ? ? ? ? if (!m_cond.timewait(m_mutex.get(), t)) {
? ? ? ? ? ? ? ? m_mutex.unlock();
? ? ? ? ? ? ? ? return false;
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? //TODO:這一塊代碼的意義不知道在哪里,留著DEBUG
? ? ? ? if (m_size <= 0) {
? ? ? ? ? ? m_mutex.unlock();
? ? ? ? ? ? return false;
? ? ? ? }
? ? ? ? m_front = (m_front + 1) % m_max_size;
? ? ? ? item = m_array[m_front];
? ? ? ? m_size--;
? ? ? ? m_mutex.unlock();
? ? ? ? return true;
? ? }
?
private:
? ? locker m_mutex;
? ? cond m_cond;
?
?
? ? T* m_array;
? ? int m_max_size;
? ? int m_size;
? ? int m_front;
? ? int m_back;
};
?
#endif

http://www.risenshineclean.com/news/9111.html

相關(guān)文章:

  • 上海做網(wǎng)絡(luò)推廣濰坊自動seo
  • 24小時自助下單網(wǎng)站搜索引擎付費推廣
  • 帝國cms網(wǎng)站遷移頁面seo是什么意思
  • 小程序制作開發(fā)關(guān)鍵詞排名優(yōu)化教程
  • wordpress 搜索 分類seo站長助手
  • wordpress企業(yè)主題教程seo優(yōu)化員
  • 做 b2b平臺的網(wǎng)站公眾號推廣引流
  • dw做網(wǎng)站投票網(wǎng)址收錄入口
  • 比較好的推廣平臺seo有名氣的優(yōu)化公司
  • 運城 網(wǎng)站制作企業(yè)郵箱賬號
  • 網(wǎng)站建設(shè)公司業(yè)務(wù)在哪里來手機怎么創(chuàng)建自己的網(wǎng)站平臺
  • b2b電子商務(wù)網(wǎng)站推廣銷售新手怎么找客源
  • 長春網(wǎng)站建設(shè)工作室seo優(yōu)化一般包括哪些
  • 網(wǎng)站頂部素材沈陽seo排名收費
  • 做食品網(wǎng)站需要什么資質(zhì)嗎公司網(wǎng)站設(shè)計公司
  • 珠海網(wǎng)站建設(shè)zhkmkj今天最近的新聞
  • 網(wǎng)站開發(fā)ide淘寶客推廣一天80單
  • dreamwearver可以做網(wǎng)站嗎免費大數(shù)據(jù)平臺
  • 綜合網(wǎng)站建設(shè)網(wǎng)絡(luò)營銷是什么意思?
  • 武漢建站公司排名百度搜索高級搜索
  • 如何做網(wǎng)站收錄百度關(guān)鍵詞收錄
  • 網(wǎng)站首頁 如何設(shè)置抖音怎么運營和引流
  • 做服裝搭配圖的網(wǎng)站有哪些搜索量查詢百度指數(shù)
  • 杭州微信網(wǎng)站制作營銷百度app下載手機版
  • 國外做飲料視頻網(wǎng)站佛山網(wǎng)站設(shè)計實力樂云seo
  • 做淘寶要用到哪些網(wǎng)站網(wǎng)站轉(zhuǎn)讓出售
  • wordpress 文章標(biāo)題調(diào)用站長工具seo詞語排名
  • 淄博教育學(xué)校網(wǎng)站建設(shè)優(yōu)就業(yè)seo課程學(xué)多久
  • wap網(wǎng)站和app的區(qū)別搜索引擎營銷的模式有哪些
  • 深圳龍華做網(wǎng)站公司seo排名賺掛機