linux系统中输出原始的数组,Linux系统编程(2)

一 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);//不需要再次使用锁的时候

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值