写一个C++的线程安全的队列
时间: 2023-05-17 12:07:58 浏览: 95
要实现线程安全的队列,需要使用互斥锁来保护队列的关键部分。
以下是一个线程安全的队列的示例代码(使用了 C 语言的 pthread 库):
```
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#define QUEUE_SIZE 10
/* 结构体:队列节点 */
typedef struct queue_node {
int data;
struct queue_node *next;
} queue_node;
/* 结构体:队列 */
typedef struct queue {
queue_node *head;
queue_node *tail;
int size;
pthread_mutex_t lock;
} queue;
/* 初始化队列 */
void queue_init(queue *q) {
q->head = NULL;
q->tail = NULL;
q->size = 0;
pthread_mutex_init(&q->lock, NULL);
}
/* 销毁队列 */
void queue_destroy(queue *q) {
pthread_mutex_destroy(&q->lock);
}
/* 入队 */
void queue_push(queue *q, int data) {
pthread_mutex_lock(&q->lock);
queue_node *new_node = (queue_node*) malloc(sizeof(queue_node));
new_node->data = data;
new_node->next = NULL;
if (q->size == 0) {
q->head = new_node;
q->tail = new_node;
} else {
q->tail->next = new_node;
q->tail = new_node;
}
q->size++;
pthread_mutex_unlock(&q->lock);
}
/* 出队 */
int queue_pop(queue *q) {
pthread_mutex_lock(&q->lock);
if (q->size == 0) {
pthread_mutex_unlock(&q->lock);
return -1;
}
int data = q->head->data;
queue_node *new_head = q->head->next;
free(q->head);
q->head = new_head;
q->size--;
pthread_mutex_unlock(&q->lock);
return data;
}
int main(int argc, char *argv[]) {
queue q;
queue_init(&q);
queue_push(&q, 1);
queue_push(&q, 2);
queue_push(&q, 3
阅读全文