首页
Web开发
Windows程序
编程语言
数据库
移动开发
系统相关
微信
其他好文
会员
首页
>
系统相关
> 详细
Linux系统编程(2)
时间:
2017-12-24 18:45:54
阅读:
183
评论:
0
收藏:
0
[点我收藏+]
标签:
linux系统编程
一 exec函数
e:env
int execle(const char *path, const char *arg,..., char * const envp[]);
环境变量指针数组:
char *envp[] = {"环境变量名=内容",NULL};
二 多线程
1.线程是进程中最小执行单元,多线程共享同一个进程的地址空间
2.Linux 内核调度的对象是线程,所以一个进程中多个线程参与操作操作系统统一调度
使用线程优点:
<1>效率高
<2>线程之间通信比较简单(全局变量)
使用线程缺点:
安全性差
三 线程API
1.线程创建
int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
void *(*start_routine) (void *), void *arg);
参数:
@thread 获取线程ID
@attr 设置线程属性 NULL:默认属性
@start_routine 线程执行的函数
@arg 给线程执行函数传递的参数
返回值:
成功返回0, 失败返回错误码
练习:
创建两个子线程,子1线程输出data值,子2线程data ++操作,主线程将data -- 操作 (data 在主线程定义)
2.线程退出
(1)线程函数返回 (return)
(2)pthread_exit
(3)pthread_cancel
(4)进程结束,这个进程中所有的线程都退出
void pthread_exit(void *retval);
功能:用来退出一个线程
参数:
@retval 返回一个地址值
int pthread_join(pthread_t thread, void **retval);
功能:等待一个线程退出,将退出线程未释放的资源释放掉
参数:
@thread 需要等待退出线程的ID
@retval 获得线程退出返回的值
void *thread_function(void *arg)
{
int data = 100;
pthread_exit(&data);
}
int main()
{
int *p;
pthread_join(tid,&p);
return 0;
}
3.将线程标记分离
分离状态的线程在结束的时候,系统自动回收它的资源
int pthread_detach(pthread_t thread);
@thread 线程ID
三 线程互斥锁
功能:对共享资源实现互斥访问,保证访问的完整性
如果使用互斥锁,每个线程在访问共享资源,都必须先获得互斥锁,然后在访问共享资源,如果无法获得互斥锁
,则表示有其他线程正在访问共享资源,此时没有获得锁的线程会阻塞,直到其他线程释放锁,能再次获得锁
1.定义互斥锁[全局,让每个线程都可以访问到]
pthread_mutex_t lock;
2.初始化互斥锁
//[线程创建之前]动态初始化,属性使用默认 NULL
int pthread_mutex_init(pthread_mutex_t *restrict mutex,const pthread_mutexattr_t *restrict attr);
//静态初始化定义初始化
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
3.获得互斥锁
int pthread_mutex_lock(pthread_mutex_t *mutex);//操作共享资源之前加锁
int pthread_mutex_trylock(pthread_mutex_t *mutex);
4.释放锁
int pthread_mutex_unlock(pthread_mutex_t *mutex);//操作共享资源结束的时候
5.销毁锁
int pthread_mutex_destroy(pthread_mutex_t *mutex);//不需要再次使用锁的时候
Linux系统编程(2)
标签:
linux系统编程
原文地址:http://blog.51cto.com/13375232/2054042
踩
(
0
)
赞
(
0
)
举报
评论
一句话评论(
0
)
登录后才能评论!
分享档案
更多>
2021年07月29日 (22)
2021年07月28日 (40)
2021年07月27日 (32)
2021年07月26日 (79)
2021年07月23日 (29)
2021年07月22日 (30)
2021年07月21日 (42)
2021年07月20日 (16)
2021年07月19日 (90)
2021年07月16日 (35)
周排行
更多
gitlab 在linux安装环境下存储地址
2021-07-29
当 Mac 未检测到外部显示器时如何修复它
2021-07-29
Ubuntu18.04安装qemu遇到问题-qemu : Depends: qemu-system (>= 1:2.11+dfsg-1ubuntu7)
2021-07-28
[Linux]Shell编程【待续】
2021-07-28
Linux系统资源查看
2021-07-27
Archlinux爬坑指南
2021-07-27
[Linux]Linux发展历程
2021-07-27
非桌面系统 (ubuntu)安装google-chrome
2021-07-27
在Ubuntu18.04系统中源码安装 gcc7.3.0
2021-07-23
Linux快捷键杂记
2021-07-22
友情链接
兰亭集智
国之画
百度统计
站长统计
阿里云
chrome插件
新版天听网
关于我们
-
联系我们
-
留言反馈
© 2014
mamicode.com
版权所有 联系我们:gaon5@hotmail.com
迷上了代码!