2022-01-12 23:28:54 如何写一个socket : RAII 资源获取就是初始化,WSAStartup 和WSACleanup 应该设计成类的静态方法,因为他们只需要在类的初始化和退出调用。 类除了保留对外的接口,内部用到的变量和方法对调用者不可见,这种习惯叫pimpl用法。 编译时指定规范: g++ -g -o te
这篇文章介绍Linux下线程同步与互斥机制–互斥锁,在多线程并发的时候,都会出现多个消费者取数据的情况,这种时候数据都需要进行保护,比如: 火车票售票系统、汽车票售票系统一样,总票数是固定的,但是购票的终端非常多。 互斥锁就是用来保护某一个资源不能同时被2个或者2个以上的线程
前言 为什么需要锁: 多条线程存在同时操作(删、查、读、写)同一个文件or对象or变量。如果不是同时或者不是同一个那就不用加锁了。关键变量:必须是“同时”,“同一事物” 自旋锁OSSpinLock 个人理解:就是一直等,忙等,一直while 到锁被解开,自旋锁不会让等待的线程进入休眠状态已经废弃
1. 读写锁介绍 读写锁与互斥锁类似,读写锁比互斥锁有更高的并行性,读写锁特点如下: 1. 读写锁有三种状态,读模式下加锁(共享)、写模式下加锁(独占)以及不加锁。 2. 一次只有一个线程可以占有写模式下的读写锁;但是多个线程可以同时占有读模式下的读写锁。 3. 读写锁在写加锁
1. 前言 前面文章介绍了Linux下进程的创建、管理、使用、通信,了解了多进程并发;这篇文章介绍Linux下线程的基本使用。 线程与进程的区别 (1)进程: 是操作系统调度最小单位。 Linux下可以通过ps、top等命令查看进程的详细信息。 (2)线程: 是进程调度的最小单位,每个进程都有一个主线
pthread_create函数编译时报错:undefined reference to 'pthread_create'由于pthread 库不是 Linux 系统默认的库,链接时需要使用静态库 libpthread.a;所以在编译使用pthread_create()创建线程的程序时,需要指定 -lpthread参数。例如:gcc thread.c -o thread -lpthread
c中的引用 之前了解c的时候,简单的看过,但是在阅读c源码的时候会突然出现这种。 #一个sds字符串+一个长度,是啥玩意? read(fd, c->querybuf+qblen, readlen); c中有两种引用->和.。 先看下-> ->是指向结构体成员运算符 ->所指向的是结构体或对象的首地址 ->的用处是使用一个
1.sleep(0)或者没有sleep /* thread_test.c */ #include <stdio.h> #include <stdlib.h> #include <pthread.h> #include <unistd.h> #define NUM_THREADS 4 pthread_mutex_t mutex; void *PrintHello(void *args) { int thread_arg;
(红色字体为分析) 【要求】所有练习题保留题目要求,在题目要求后面作答: 代码要求有注释,代码中适当标注关键代码为红色。 要有运行结果的截图。 每题最后应该有对程序的适当分析和总结! 注意格式排版,内容分析注意列条目,展开清楚地阐述。 1、分析理解多个进程的创建 1)若一个程序中有
==4832== at 0x804847B: test (in /home/yanghao/Desktop/testC/testmem/tmp) ==4832== by 0x804848D: main (in /home/yanghao/Desktop/testC/testmem/tmp) ==4832== ==4832== HEAP SUMMARY: ==4832== in use at exit: 0 bytes in 0 blocks ==4832==
使用上pthread_cond_t遇到的死锁问题 最近在一个项目中使用pthread_cond_t的时遇到一个死锁的问题,特记录分享一下。这个问题的使用场景很简单,客户端程序起两个线程,一个线程发送数据给服务器,另一个线程接收服务器的返回。发送线程向服务器发送一个数据报,然后等待服务器返回(用pt
1.linux 中把分区和目录对应的过程叫做( )。 挂载 2.信号是在软件层次上对()机制的一种模拟, 是一种异步通信方式。 中断 3.用 GCC 编译过程可以被细分为四个阶段:( ) 预处理,编译,汇编,连接 4.编译有线程的文件要加( )参数。 -lpthread 5.父进程等待子进程的结束,可以使用的函数是(
0. 头文件 #include <pthread.h> 1. 初始化 int pthread_mutex_init(pthread_mutex_t *restrict mutex, const pthread_mutexattr_t *restrict attr); 简单的使用可以使用默认的属性初始化互斥量,第二个参数设置为NULL即可。 2. 销毁 int pthread_mutex_destroy(pthread_mute
互斥锁的作用 保护共享数据: 在并发机制的情况下,有时候会有多个线程同时访问同一片数据,为了保护数据操作的准确性就需要通过加锁来进行保护。 保持操作互斥: 可能一个程序会有多个操作,但是同一个时间只能有一个操作被执行,例如a/b两个操作,如果a被执行,b就不能被执行,同理b被执行,a
#define MAX_THREADS 1 class Test { public: Test(): m_stop(false), s("Object exists.") { printf("ctor\n"); m_threads = new pthread_t[MAX_THREADS]; for (int i = 0; i < MAX_THREADS; i++) { pthread_create(m_threads + i, NULL
我们先来看一段代码: #include <stdio.h> #include <stdlib.h> #include <pthread.h> //创建两个线程,分别对两个全变量进行++操作,判断两个变量是否相等,不相等打印 int a = 0; int b = 0; // 未初始化 和0初始化的成员放在bbs pthread_mutex_t mutex; void* route() {
实现一个计程车的流程,打车,taxi,上车,到达 #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <pthread.h> //定义头文件 pthread_cond_t taxicond = PTHREAD_COND_INITIALIZER; /*初始化条件变量*/ pthread_mutex_t taximutex = PTHREAD_MUTEX_
三、Linux多线程开发 线程概述 与进程(process)类似,线程(thread)是允许应用程序并发执行多个任务的一种机制。一个进程可以包含多个线程。同一个程序中的所有线程均会独立执行相同程序,且共享同一份全局内存区域,其中包括初始化数据段、未初始化数据段,以及堆内存段。(传统意义上的 U
线程的清理函数 类似于进程的终止函数atexit()。 include <pthread.h> void pthread_cleanup_push( void (*rtn)(void*), void* arg); void pthread_cleanup_pop(int execute); 以上一组代码是成对出现的,具体执行可写成: while(execute) { //执行线程处理函数 } 参数 rtn:
1.创建2个线程,线程1输出线程id和自己姓名,线程2输出线程id和自己学号,比较两个线程id是否相等,输出比较的结果。 #include <stdio.h> #include <stdlib.h> #include <pthread.h> #include <unistd.h> //定义线程1运行函数 void* th_fn1(void *arg) //传入void*数值 { printf(
一、线程同步的概念 线程同步?怎么同步?一起运行?一起停止?我当年听说线程同步这个词的时候,也是一头雾水。 在人们的日常生活中的锁大概有两种:一种是不允许访问;另一种是资源忙,同一时间只允许一个使用者占用,其它使用者必须要等待。 1)不允许访问的锁容易理解,就像每家每户的门锁,不允许
多线程不能调用strtok函数,它内部是用一个静态全局变量来记住当前位置,所以在main函数结束之前,线程和主函数用的是一个strtok,因此是错误的,下面是错误的代码。 #include<stdio.h> #include<stdlib.h> #include<>string.h #include<semaphore.h> #include<pthread.h> void* fun
1. C 互斥锁 mutex初始化与去初始化 #include <pthread.h>int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *attr);int pthread_mutex_destroy(pthread_mutex_t *mutex);pthread_mutex_init 使用指定的attr属性初始化一个互斥锁mutex 。如果 atrr 设为
int sum=0; void* work1(void* argv) { int i=1; while(i<500) { sum+=i; i++; } } void* work2(void* argv) { int i=500; while(i<=1000) { sum+=i; i++; } } int fun() { int ans = 0; for (int i = 1; i
一、概述 案例:使用pthread+消息队列(单链表环形队列) 实现生产者消费者模型 各个类的职责说明: 1.message_queue.cpp消息队列 ps:这个类最主要的方法有两个(这个类是线程安全的),一个是enqueueMessage(Message)向消息队列中放入数据,另一个是dequeueMessage(&Messag