Linux的线程也是曲折的,2.4内核的时候居然线程使用进程来实现。不过2.6内核我是没看到有什么诡异的了。线程是线程,进程是进程。
为什么要线程呢?
线程的切换,不需要切换进程的上下文,比如N多寄存器值的保存。所以是轻量级的。速度也更快,但是同时也带来很多问题,比如同步。
现在让我们来简单看看Linux的线程吧。
下面的程序,通过多线程,并且互斥来对一个变量累加。
#include<stdio.h>
#include<stdlib.h>
#include<pthread.h>
#include<unistd.h>
#include<limits.h>
#define MAX 100
pthread_mutex_t mutex; //互斥量
static int count; //需要同步的数据
void err_quit(char *msg)
{
fprintf(stderr,"%s\n",msg);
exit(0);
}
void *th_incre(void *arg) //一个线程执行的函数
{
int pid;
pthread_mutex_lock(&mutex); //加锁互斥量
pid = (int)arg;
printf("%d thread and count=%d\n",pid,count);
count++;
pthread_mutex_unlock(&mutex); //别忘了解锁
pthread_exit((void *)0); //线程退出,也可以return,注意返回值
}
int main(int argc, char *argv[])
{
pthread_t pid[MAX];
int i,err;
void *status[MAX];
long max_thread=sysconf(_SC_THREAD_THREADS_MAX);//这句废话,Linux不支持
printf("MAX_THREAD=%ld\n",max_thread);
pthread_mutex_init(&mutex, NULL);//请不要忘记初始化互斥量,当然也可以用静态的PTHREAD_MUTEX_INITIALIZER
for(i = 0; i < MAX; i++){
err = pthread_create(&pid[i],NULL,th_incre,(void *)i); //这一句是关键。
if(err != 0)
err_quit("create thread error");
pthread_join(pid[i],&status[i]);//等待线程退出,很可能出错。在redhat5.5上出错
}
pthread_mutex_destroy(&mutex);//有初始化,就有销毁
exit(0);
}
一个简单多线程程序。并使用了互斥量同步。当然,线程还有很多复杂的东西。以后再说。
对了,这里要说一下,在连接的时候请使用 -lpthread 选项,要加载线程库。
$gcc -g -Wall -lpthread -o count th_count.o
分享到:
相关推荐
Linux是一种免费且开源的类Unix操作系统,具有多用户、多任务、支持多线程和多CPU的特点。它支持32位和64位硬件,并且继承了Unix以网络为核心的设计理念,成为一种性能稳定的多用户网络操作系统。 #### 1.2 Linux的...
同时,读者还会接触到线程的概念和多线程编程,包括互斥锁、条件变量等同步机制。 在文件系统和I/O部分,作者会讲解Linux下的文件操作,如打开、读写文件,以及标准I/O库的使用。此外,还会涉及设备文件和字符特殊...
《初识Linux编程》第四版是一本针对Linux系统下的C语言编程的经典教程,旨在帮助读者深入理解Linux环境下的程序设计。这本书涵盖了丰富的知识点,对于想要在Linux平台进行C语言编程的初学者来说,是一份不可多得的...
此外,还会探讨进程同步和互斥的概念,如信号量、管程和条件变量,这些都是多线程编程的基础。 网络编程是现代应用开发的重要组成部分,Linux提供了丰富的API来支持网络通信。本书会讲解套接字编程,包括TCP/IP协议...
- 线程编程:Linux支持多线程编程,pthread库提供了创建、同步和管理线程的相关函数。 4. **I/O操作** - 标准输入/输出:stdin、stdout和stderr是Linux程序的基本I/O流,了解如何读写文件描述符和管道。 - 文件...
此外,还将讨论多线程编程,使读者了解如何利用并发性提高程序性能。同时,网络编程也是现代Linux应用不可或缺的一部分,本书将介绍套接字编程,以便读者能创建网络服务和客户端应用。 除了编程技术,本书还强调了...
多线程编程可以提高程序的并发性和效率。 I/O操作在Linux编程中扮演着重要角色。标准输入、输出和错误流是每个进程都有的三个文件描述符,它们分别对应键盘、显示器和错误输出。学会重定向和管道等高级I/O技术,能...
同时,本书还探讨了多线程编程,讲解了线程同步和互斥锁的概念,帮助读者理解并发执行的原理。 网络编程是Linux编程的重要组成部分,书中通过实例展示了如何使用套接字API创建网络应用程序,包括TCP/IP和UDP协议的...
此外,还有关于多线程和并发编程的内容,帮助你构建能够处理多个连接的高效服务。 在深入学习Linux编程的过程中,理解操作系统内核的工作原理也是必不可少的。本书会讲解进程调度、内存管理、设备驱动等基础知识,...
9. **多线程和进程间通信**:书中会讨论Linux下的多线程编程(pthread库)和进程间通信(管道、消息队列、共享内存、信号量等),这些都是实现并发和协作程序的关键技术。 10. **设备驱动和内核模块编程**:对于有...
此外,还涉及了异步I/O和多线程编程技术,以适应高性能网络应用的需求。 总的来说,《初识Linux编程》第三版为读者提供了一个全面而系统的Linux编程学习路径。通过阅读这本书,不仅可以掌握C语言在Linux下的应用,...
此外,书中可能还会涉及多线程编程,介绍pthread库的使用,以及线程同步和互斥锁的概念。这在开发高并发、高性能的应用时尤为关键。 安全性和权限控制也是Linux编程的重要一环。读者将学习如何正确地处理用户权限、...
本文将深入探讨在嵌入式Linux系统中的基础知识,包括初识Linux、安装流程、命令行操作、GUN工具链和GDB调试器的使用,以及Linux下的C编程。 首先,初识Linux,我们需要了解它的历史和特性。Linux是由Linus Torvalds...
同时,学习 Linux 也需要了解 Linux 的基本概念,如进程、线程、文件系统等。 5. Linux 系统管理 Linux 系统管理包括用户权限管理、文件系统管理、进程管理等。用户权限管理包括用户创建、用户组管理、权限分配等...
Linux遵循POSIX标准,兼容大部分UNIX工具软件,支持32位和64位硬件,同时具备多用户、多任务、多线程和多CPU的能力,确保了系统的高效运行。 2. **操作系统基础** 操作系统是管理和协调计算机硬件和软件资源的程序...
信号量用于同步多线程访问临界资源;中断是硬件事件的通知机制,中断处理程序在内核上下文运行;时间管理涉及到时钟中断、定时器、延迟函数等,用于调度和计时。 8. **第4章 系统初始化.doc** Linux启动过程包括...
第10章 "对称多处理(SMP)"介绍了Linux在多核CPU上的并行执行策略,包括CPU亲和性、锁和同步原语等,对于编写高性能的多线程程序具有指导意义。 第11章 "可调内核参数"讨论了如何调整内核参数以优化系统性能,包括...
"第2章 代码初识.pdf" 可能介绍了Linux系统编程的基本概念,可能包括文件I/O、系统调用、错误处理等方面,是所有Linux开发者的基础。 "第10章 对称多处理(SMP).pdf" 关注的是对称多处理技术,即在同一时刻,多个...