Linux系统编程
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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系统编程的主要内容,如果未能解决你的问题,请参考以下文章