昨天做了博创实验二,一个多线程的程序,程序中创建了两个线程,即生产者线程和消费者线程。
自已的感受是:
两个线程的切换是通过系统内核的调度来切换的,这在主函数体内是看不到的。(如ucosii中创建任务一样,任务间的调度是通过内核完成的)。缓冲区满时,生产者的put函数内通过pthread_cond_wait来解开之前获得的线程锁,同时本线程被条件变量阻塞。所以会切换到消费者线程。
缓冲区未满时,通过互斥锁来保证put函数体执行完毕,即向缓冲区内写入一个数据。
实验笔记
1. 多线程程序(多任务、并发工作方式)的优缺点: 提高应用程序响应。 多cpu系统更加有效。 改善程序结构。 LIBC的pthread库提供大量API函数 2.实验源代码 主程序中启动生产者线程和消费者线程。 生产者线程不断顺序地将0到1000的数字写入共享的循环缓冲区。 消费者线程不断地从共享的循环缓冲区读取数据。 线程创建函数: int pthread_create( pthread_t *thread_id, /* 指向线程标识符的指针 */ __const pthread_attr_t *attr, /* 设置线程属性 */pthread_cond_wait void *(*__start_routine)(void *),/*线程运行函数的起始地址(函数指针)*/ void *__restrict__arg /*运行函数的参数 */ ) 线程创建成功时函数返回0,若不为0则创建线程失败。 获得父进程:pthread_t pthread_self(void)
测试两处线程号是否相同: int pthread_equal(pthread_t__thread1,pthread_t__thread2)
线程退出: void pthread_exit(void *__retval) 一个线程的结束有两种途径,一种是函数结束了,调用这的线程也就结束了,另一种方式是通过此函数来实现。唯一的参数是函数返回代码,只要pthread_join 中的第二个参数不是NULL,这个值将被传递给thread_return。一个线程不能被多个线程等待,否则第一个接收到信号的线程成功返回,其余调用pthread_join的线程则返回错误代码。
等待指定的线程结束: int pthread_join( pthread_t__th, /* 被等待的线程标志符*/ void **__thread_return /* 用户定义的指针,可以用来存储被等待线程的返回值*/ ) 此函数为线程阻塞函数,调用它的函数将一直等待骊被等待的线程结束为止,函数返回时,被等待的线程资源被收回。
互斥量初始化: pthread_mutex_init(pthread_mutex_t *,__const pthread_mutexattr_t *)
销毁互斥量: int pthread_mutex_destroy(pthread_mutex_t *__mutex)
再试一次获得对互斥量的锁定(非阻塞): int pthread_mutex_trylock(pthread_mutex_t *__mutex)
锁定互斥量(阻塞): int pthread_mutex_lock(pthread_mutex_t *__mutex)
解锁互斥量: int pthread_mutex_unlock(pthread_mutex_t *__mutex)
条件变量初始化: int pthread_cond_init(pthread_cond_t *__restrict__cond, /*指向结构pthread_cond_t的指针*/ __const pthread_condattr_t *__restrict__cond_attr /*指向结构pthread_condattr_t的指针*/ ) 条件变量的结构为pthread_cond_t.此函数用来初始化一个条件变量。结构pthread_condattr_t是条件变量的属性结构,用它来设置条件变量是进程内可用还是进程间可用。
销毁条件变量COND: int pthread_cond_destroy(pthread_cond_t *__cond)
唤醒线程等待条件变量: int pthread_cond_signal(pthread_cond_t *__cond) 释放被阻塞在条件变量cond上的一个线程。多个线程阻塞在此条件变量上时,哪一个线程被唤醒是由线程调试策略所决定的。
等待条件变量(阻塞): int pthread_cond_wait(pthread_cond_t *__restrict__cond,pthread_mutex_t *__restrict__mutex) 使线程阻塞在一个条件变量上。线程解开mutex指向的锁,并被条件变量cond阻塞。
在指定的时间到达前等待条件变量: int pthread_cond_timewait(pthread_cond_t *restrict__cond,pthread_mutex_t *__restrict__mutex,__const struct timespec *__restrict__abstime)
|
今天终于来实验室了,跟两位研究生师兄在一间里。拿到箱子,以后就在这里扎根了。
经过这两天对毕业设计的苦苦迷茫,终于现在有了一点思路。现决定步骤如下:
做完并理解书上的实验,主要有:
1.A/D接口实验
2.简单嵌入式web服务器实验
这两个跟毕业设计应该有很大关系。
3.linux内核移值与编译实验
4.根文件系统实验
5.模块方式驱动实验
6.触摸屏驱动
做实验,c语言的掌握。makefile的编写。
做完以上东西后。再进入c++和qt。。。。
阅读(951) | 评论(0) | 转发(0) |