這裡實現一個基於陣列的執行緒安全的迴圈佇列
具體程式碼如下:
#include<pthread.h> #include<iostream> using namespace std; #define QUEUESIZE 128 template<class object> class ThreadSafeQueue { private: pthread_mutex_t m_lock; int m_front; int m_rear; object m_data[QUEUESIZE]; public: ThreadSafeQueue():m_front(0),m_rear(0) { pthread_mutex_init(&m_lock,NULL); } bool EnQueue(object data) { pthread_mutex_lock(&m_lock); if(isFull()) { cout<<"The queue is full!"<<endl; pthread_mutex_unlock(&m_lock); return false; } m_data[m_rear] = data; m_rear = (m_rear+1)%QUEUESIZE; pthread_mutex_unlock(&m_lock); return true; } bool DeQueue(object& data) { pthread_mutex_lock(&m_lock); if(isEmpty()) { cout<<"The queue is empty!"<<endl; pthread_mutex_unlock(&m_lock); return false; } data = m_data[m_front]; m_front = (m_front+1)%QUEUESIZE; pthread_mutex_unlock(&m_lock); return true; } bool isFull() { if((m_rear+1)%QUEUESIZE == m_front) return true; return false; } bool isEmpty() { if(m_rear == m_front) return true; return false; } ~ThreadSafeQueue() { pthread_mutex_destroy(&m_lock); } }; int main(int argc, char* argv[]) { ThreadSafeQueue<int> testQueue; int out = 0; if(!testQueue.DeQueue(out)) cout<<"DeQueue false!"<<endl; else cout<<"DeQueue true out="<<out<<endl; testQueue.EnQueue(12); testQueue.EnQueue(13); testQueue.EnQueue(14); if(!testQueue.DeQueue(out)) cout<<"DeQueue false!"<<endl; else cout<<"DeQueue true out="<<out<<endl; if(!testQueue.DeQueue(out)) cout<<"DeQueue false!"<<endl; else cout<<"DeQueue true out="<<out<<endl; if(!testQueue.DeQueue(out)) cout<<"DeQueue false!"<<endl; else cout<<"DeQueue true out="<<out<<endl; if(!testQueue.DeQueue(out)) cout<<"DeQueue false!"<<endl; else cout<<"DeQueue true out="<<out<<endl; return 0; }
g++ queue.c -lpthread
相關推薦
這裡實現一個基於陣列的執行緒安全的迴圈佇列
具體程式碼如下: #include<pthread.h> #include<iostream> using namespace std; #define QUEUESIZE 128 template<class object> cla
基於CAS執行緒安全實現計數器
在多執行緒環境下,實現一個CAS原理的執行緒安全的技術器,並與不使用CAS演算法的計數器進行比較。 package com.feiyu.text; import java.util.ArrayList; import java.util.List; import jav
C++11:基於std::queue和std::mutex構建一個執行緒安全的佇列
C++中的模板std::queue提供了一個佇列容器,但這個容器並不是執行緒安全的,如果在多執行緒環境下使用佇列,它是不能直接拿來用的。 基於它做一個執行緒安全的佇列也並不複雜。基本的原理就是用std::mutext訊號量對std::queue進行訪問控制,以
c/c++ 多執行緒 利用條件變數實現執行緒安全的佇列
多執行緒 利用條件變數實現執行緒安全的佇列 背景:標準STL庫的佇列queue是執行緒不安全的。 利用條件變數(Condition variable)簡單實現一個執行緒安全的佇列。 程式碼: #include <queue> #include <memory> #include
多執行緒 繼承Thread類 實現Runnable介面 多執行緒安全 synchronized 單例設計懶漢 鎖死
程序 是一個正在執行中的程式。 每個程序執行都有一個執行順序,該順序是一個執行路徑,或者叫一個控制單元。 舉例子:一個程序,就是一個正在執行的程式。 執行緒 就是程序中的一個獨立的控制單元。 執行緒在
Go語言實現執行緒安全訪問佇列
這個例子用Go語言的包"container/list"實現一個執行緒安全訪問的佇列。其中不少細節耐人尋味,做出它則是花費了不少精力,找不到樣例啊! Go語言的許多優點自不必說,然而從C/C++程式角度看,語言的語法也好,程式的實現方式也好,看起來總有點怪怪的感覺。 在這個程
C++實現執行緒安全的佇列
C++標準庫已經提供了std::queue這一佇列容器,但不是執行緒安全的。std::queue這個容器已經提供了pop(),push(),empty()等這些讀寫操作容器的函式,只要在這些函式上面加個鎖,就可以使其執行緒安全。 在C++原有容器上面進
用c++11寫的一個執行緒安全的佇列
#ifndef __MSG__QUEUE__H__ #define __MSG__QUEUE__H__ #include <thread> #include <mutex>
二、執行緒安全阻塞佇列 BlockingQueue 入門
一、BlockingQueue繼承關係 java.util.concurrent 包裡的 BlockingQueue是一個介面, 繼承Queue介面,Queue介面繼承 Collection BlockingQueue --> Queue –-> Collection
三、執行緒安全阻塞佇列 BlockingQueue 詳解
轉載自: https://www.cnblogs.com/WangHaiMing/p/8798709.html 本篇將詳細介紹BlockingQueue,以下是涉及的主要內容: BlockingQueue的核心方法 阻塞佇列的成員的概要介紹 詳細介紹DelayQu
基於stl序列容器實現的通用集合類 (執行緒安全版)
{ 31 typedef U<T> Allocator; 32 typedef C<T,Allocator>base; 33 typedef STLCollection<T,ThreadModel,MutexPolicy,C,U> self; 34 35p
一個執行緒安全的計數器實現(java),可以讓一個變數每天從1開始遞增
前幾天工作中一段業務程式碼需要一個變數每天從1開始遞增。為此自己簡單的封裝了一個執行緒安全的計數器,可以讓一個變數每天從1開始遞增。當然了,如果專案在執行中發生重啟,即便日期還是當天,還是會從1開始重新計數。所以把計數器的值儲存在資料庫中會更靠譜,不過這不影響這
linux下的一個簡單執行緒安全記憶體池實現
這裡提供一個簡單執行緒安全記憶體池, 基於linux pthread 如下圖: 具體的資料結構: typedef struct LocMap{ char * point;
實現一個執行緒安全的單例模式
一、單例模式 單例模式也叫單件模式。Singleton是一個非常常用的設計模式,幾乎所有稍微大一些的程式都會使用它,所以構建一個高效的Singleton很重要。 1、單例類保證全域性只有一個唯一例項物件 2、單例類提供獲取這個唯一例項的介面。
如何實現一個執行緒安全的map?
我們都知道,map是執行緒不安全的,那麼我們如何才能實現一個執行緒安全的map呢? 這裡介紹4種實現方式: 1、使用synchronized來進行約束: synchronized(obj){ value = map.get(key); } 2、使用JDK1.5版本
阿里面試官讓我實現一個執行緒安全並且可以設定過期時間的LRU快取,我蒙了!
目錄1. LRU 快取介紹2. ConcurrentLinkedQueue簡單介紹3. ReadWriteLock簡單介紹4.ScheduledExecutorService 簡單介紹5. 徒手擼一個執行緒安全的 LRU 快取5.1. 實現方法5.2. 原理5.3. put方法具體流程分析5.4. 原始碼6.
Qt中實現執行緒安全的單例模式
之前專案中用到單例模式,用的是執行緒不安全的,這次專案用到了多執行緒,所以想到實現一個執行緒安全的單例模式。經過查詢資料,發現Qt本身有自己的執行緒安全單例模式實現方式。 Q_GLOBAL_STATIC巨集 使用方法:MonitorWindow.h #ifndef MONITORW
設計模式之單例模式【內附物件例項化幾種方式、實現執行緒安全幾種方式】
繼續來複習常用的設計模式-單例模式,順便回憶一下執行緒安全的幾種實現方式。 一、什麼是單例模式 單例模式,簡單常用的一種設計模式,也很好的體現了程式碼控制物件在記憶體數量的一種方式,主要分2種實現方式: ①餓漢式,執行緒安全 ②懶漢式,執行緒不安全(新增鎖機制,可以實現執行緒安全)
JVM——執行緒安全的實現方法
一互斥同步(悲觀的併發策略) 同步是指在多個執行緒併發訪問共享資料時,保證共享資料在同一時刻只被一個執行緒使用。互斥是實現同步的一種手段,下面介紹兩種互斥同步的手段:synchronized關鍵字和concurrent包中的重入鎖ReentrantLock synchronized關鍵字:
實現Runnable解決多執行緒資料安全問題
xl_echo編輯整理,歡迎轉載,轉載請宣告文章來源。更多IT、程式設計案例、資料請聯絡QQ:1280023003,加群298140694。百戰不敗,依不自稱常勝,百敗不頹,依能奮力前行。——這才是真正的堪稱強大!! 之前的文章我們講到了,四個電影院視窗同時出售50張彩票的