嵌入式Linux中文站

Linux环境多线程编程基础设施

阅读(147)

本文介绍多线程环境下并行编程的基础设施。主要包括: Volatile __thread Memory Barrier __sync_synchronize volatile 编译器有时候为了优化性能,会将一些变量的值缓存到寄存器中,因此如果编译器发现该变量的值没有改变的话,将从寄存器里读出该值,这样可以避免内存访问。 但是这种做法有时候会有问题。如果该变量确实(以某种很难检测的方式)被修改呢?那岂不是读到错的值?是的。在多线程情况下,问题更为突出:当某个线程对一个内存单元进行修改后,其他线程如果从寄存器里

Linux IPC Pipe

阅读(96)

mkfifo() //创建有名管道(FIFO special file),创建完了就像普通文件一样open(),再读写,成功返回0,失败返回-1设errno。VS$man 3 mkfifo # include sys/types.h # include sys/stat.h int mkfifo ( const char *pathname, mode_t mode) ; pathname :the FIFO special files name mode :the FIFOs permissions.

Linux多进程编程

阅读(189)

进程的状态 Linux进程有7种基础状态(两种running算一种),除了traced都可以用 $ps 命令查看, $ps 可以查看的进程状态如下,更多进程状态信息参见Linux Process VS Thread VS LWP R running or runnable (on run queue) D uninterruptible sleep (usually IO) S interruptible sleep (waiting for an event to complete) T stopped

Linux 多线程信号量同步

阅读(96)

PV原子操作 P操作: 如果有可用的资源(信号量值0),则此操作所在的进程占用一个资源(此时信号量值减1,进入临界区代码); 如果没有可用的资源(信号量值=0),则此操作所在的进程被阻塞直到系统将资源分配给该进程(进入等待队列,一直等到资源轮到该进程)。 V操作: 如果在该信号量的等待队列中有进程在等待资源,则唤醒一个阻塞进程;如果没有进程等待它,则释放一个资源(即信号量值加1)。 模型 # include semaphore.h sem_t sem //定义信号量 sem_init() //初始化信号量

Linux 多线程互斥量互斥

阅读(156)

同步 同一个进程中的多个线程共享所在进程的内存资源,当多个线程在同一时刻同时访问同一种共享资源时,需要相互协调,以避免出现数据的不一致和覆盖等问题,线程之间的协调和通信的就叫做线程的同步问题, 线程同步的思路: 让多个线程依次访问共享资源,而不是并行 互斥VS同步 互斥:是指某一资源同时只允许一个访问者对其进行访问,具有唯一性和排它性。但互斥无法限制访问者对资源的访问顺序,即访问是无序的。如果操作是原子操作,那么天然的具有互斥 同步:是指在互斥的基础上(大多数情况),通过其它机制实现访问者对资源的有序访

Linux 多线程编程

阅读(131)

概念 原来指向main()的线程叫做主线程(main thread) 使用pthread_create()创建出来的线程,叫做子线程(child thread) 主/子线程只有在创建时才有区别, 创建完了就一视同仁, 都是一样的独立个体, 可以有交流、共享和私有, 但没有上下级, 这一点和多进程一样, 只有在创建的瞬间才有parent process 和child process 的区别, 创建完了就都是一样的独立个体 创建完子线程之后,两个线程之间独立运行,线程的执行先后次序由OS的调度算法决定 线程之

Linux IPC udp/ip socket 编程

阅读(79)

模型 # include unistd.h # include sys/types.h # include sys/socket.h # include netinet/in.h # include arpa/inet.h //服务器: socket() //创建socket struct sockaddr_in //准备通信地址 bind() //绑定socket和addr sendto()/recvfrom //进行通信 close() //关闭socket //客户端: socket() //创建s

Linux IPC socket编程基础

阅读(159)

头文件 # include unistd.h # include sys/types.h # include sys/socket.h # include sys/un.h # include netinet/in.h # include string.h # include arpa/inet.h socket() //创建网络端点,返回socket文件描述符,失败返回-1设errno int socket ( int domain, int type, int protocol) ; domain :