随笔分类 - Network programming
摘要:1 线程池 为了避免多线程操作过程种线程频繁申请和释放所带来的性能消耗,可以提前创建多个线程,当有任务到来时从线程池中选择一个线程执行,执行完后继续在线程池中待命。 核心是使用一个工作队列,主线程往工作队列中添加工作,工作线程从队列中取出工作并执行。 对工作队列的操作就是经典的生产者—消费者模型,需
阅读全文
摘要:生产者消费者是典型的线程同步问题,生产者往共享区域中生产加入产品,消费者往共享区域中消费取出产品。 生产者:若共享区域未满,则加入产品,并通知消费者;若共享区域已满,则等待消费者消费。 消费者:若共享区域为空,则等待生产者生产;若共享区域未满,则消费并通知生产者。 #include<stdio.h>
阅读全文
摘要:while(条件判断){ pthread_cond_wait(&cond, &lock); } 在上面的情况中,如果我们不使用互斥锁,可能在 while 语句之后,当前线程还未进入 wait ,但是另一个线程调用了 pthread_cond_singal,就会导致唤醒丢失。 所以,在操作条件变量时需
阅读全文
摘要:1 为何需要线程同步? 由于线程共享进程的资源,会产生竞态条件,在某些情况下需要协调指令执行的先后顺序,也就是实现线程同步。 下面是一个常见的多线程累加程序,由于sum++并不是一个原子操作,所以多个线程互相抢占从而造成计算错误。 #include<stdio.h> #include<stdlib.
阅读全文
摘要:半连接队列和全连接队列 在 socket 编程中, 服务器通过 listen 函数进行监听: #include<sys/socket.h> int listen(int sockfd, int backlog) 这个 backlog 的作用时什么呢?这就涉及到 TCP 的细节了。 服务器第一次收到客
阅读全文