Chinaunix首页 | 论坛 | 博客
  • 博客访问: 444611
  • 博文数量: 72
  • 博客积分: 3186
  • 博客等级: 中校
  • 技术积分: 1039
  • 用 户 组: 普通用户
  • 注册时间: 2009-03-07 16:53
文章分类

全部博文(72)

文章存档

2012年(1)

2011年(5)

2010年(10)

2009年(56)

我的朋友

分类: LINUX

2009-03-09 22:13:42

昨天做了博创实验二,一个多线程的程序,程序中创建了两个线程,即生产者线程和消费者线程。
 
自已的感受是:
两个线程的切换是通过系统内核的调度来切换的,这在主函数体内是看不到的。(如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。。。。

 

阅读(924) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~