Tag:

C Pthreads – 线程安全队列实现的问题

我是multithreading的新手,我试图实现一个简单的线程安全任务队列,每个线程可以从中拉出工作,直到没有剩下的任务。 任何线程都不会排队任务。 出于测试目的,每个任务仅包含一个数字。 static pthread_mutex_t task_mutex = PTHREAD_MUTEX_INITIALIZER; typedef struct Task{ int number; }Task; typedef struct Cell{ Task t; struct Cell* next; }Cell; typedef struct TQueue{ struct Cell* head; struct Cell* tail; }TQueue; int empty(TQueue *Queue) return queue->head == queue->tail; void startQueue(TQueue *queue){ queue->head = malloc(sizeof(Cell)); queue->tail = queue->head; } void enqueue(TQueue *queue, Task C){ […]

实现multithreadingUDP服务器的问题(线程池?)

我正在写一个音频流(客户端 – 服务器)作为我的项目(C / C ++),我决定为这个项目制作一个multithreadingUDP服务器。 这背后的逻辑是每个客户端将在他自己的线程中处理。 我遇到的问题是线程相互干扰。 我的服务器做的第一件事就是创建一种线程池; 它创建了5个线程,所有线程都被recvfrom()函数自动阻止,虽然看起来,在我将多个线程连接到服务器的大多数情况下,多个线程正在响应,之后导致服务器变为完全阻止而不是进一步操作。 调试这个也很困难所以我写这里是为了获得一些关于multithreadingUDP服务器通常实现的建议。 我应该在部分代码中使用互斥锁或信号量吗? 如果是这样,在哪里? 任何想法都会非常有帮助。

如何循环select()无限制地轮询数据

#include #include #include #include int main () { char name[20]; fd_set input_set; struct timeval timeout; int ready_for_reading = 0; int read_bytes = 0; /* Empty the FD Set */ FD_ZERO(&input_set ); /* Listen to the input descriptor */ FD_SET(0, &input_set); /* Waiting for some seconds */ timeout.tv_sec = 10; // 10 seconds timeout.tv_usec = 0; […]

C中的内存池实现

我在C中寻找一个好的内存池实现。 它应该包括以下内容: 反碎片化。 超级快:) 能够在某个标识符下“捆绑”来自不同大小的多个分配,并删除具有给定标识符的所有分配。 线程安全

C:用pthreads制作poolthread的方法是什么?

我有一个工作队列,我想建立一个4线程的池,我可以把我的工作。 我所坚持的是如何制作线程并在没有工作的情况下让它们暂停。 JOB QUEUE | job1 | job2 | job3 | job4 | .. THREAD POOL | thread1 | thread2 | thread3 | thread4 | 要创建我当前处于初始化点的线程: for (t=0; t<num_of_threads; t++){ pthread_create(&(threads[t]), NULL, doSth2, NULL); } num_of_threads = 4且doSth2是一个内部没有任何内容的函数。 所以一旦我创建了4个线程并且完成了doSth2,我怎么能给他们新的工作呢,而不会杀死他们?