摘要: 第三篇:struct和typedef struct分三块来讲述:1 首先: 在C中定义一个结构体类型要用typedef: typedef struct Student { int a; }Stu; 于是在声明变量的时候就可:Stu stu1; 如果没有typedef就必须用struct Student stu1;来声明 这里的Stu实际上就是struct Student的别名。 另外这里也可以不写Student(于是也不能struct Student stu1;了) typedef struct { int a; }Stu; 但在c++里很简单,直接 struct Student { int 阅读全文
posted @ 2013-04-09 11:08 米其林轮船 阅读(68) 评论(0) 推荐(0) 编辑
摘要: typedef struct Student{int age;char* name;}Stu; //这里的Stu相当于struct Student的别名Stu student1; 阅读全文
posted @ 2013-04-09 11:03 米其林轮船 阅读(127) 评论(0) 推荐(0) 编辑
摘要: 条件变量详解在 上一篇文章结束时,我描述了一个比较特殊的难题:如果线程正在等待某个特定条件发生,它应该如何处理这种情况?它可以重复对互斥对象锁定和解锁,每次都会检查共享数据结构,以查找某个值。但这是在浪费时间和资源,而且这种繁忙查询的效率非常低。解决这个问题的最佳方法是使用 pthread_cond_wait() 调用来等待特殊条件发生。了解 pthread_cond_wait() 的作用非常重要 -- 它是 POSIX 线程信号发送系统的核心,也是最难以理解的部分。首先,让我们考虑以下情况:线程为查看已链接列表而锁定了互斥对象,然而该列表恰巧是空的。这一特定线程什么也干不了 -- 其设计意图 阅读全文
posted @ 2013-04-09 10:40 米其林轮船 阅读(140) 评论(0) 推荐(0) 编辑
摘要: 互斥我吧!在 前一篇文章中 ,谈到了会导致异常结果的线程代码。两个线程分别对同一个全局变量进行了二十次加一。变量的值最后应该是 40,但最终值却是 21。这是怎么回事呢?因为一个线程不停地“取消”了另一个线程执行的加一操作,所以产生这个问题。现在让我们来查看改正后的代码,它使用 互斥对象(mutex)来解决该问题:thread3.c#include <pthread.h>#include <stdlib.h>#include <unistd.h>#include <stdio.h>int myglobal;pthread_mutex_t mymu 阅读全文
posted @ 2013-04-09 10:38 米其林轮船 阅读(119) 评论(0) 推荐(0) 编辑
摘要: 线程是有趣的了解如何正确运用线程是每一个优秀程序员必备的素质。线程类似于进程。如同进程,线程由内核按时间分片进行管理。在单处理器系统中,内核使用时间分片来模拟线程的并发执行,这种方式和进程的相同。而在多处理器系统中,如同多个进程,线程实际上一样可以并发执行。那么为什么对于大多数合作性任务,多线程比多个独立的进程更优越呢?这是因为,线程共享相同的内存空间。不同的线程可以存取内存中的同一个变量。所以,程序中的所有线程都可以读或写声明过的全局变量。如果曾用 fork() 编写过重要代码,就会认识到这个工具的重要性。为什么呢?虽然 fork() 允许创建多个进程,但它还会带来以下通信问题: 如何让多个 阅读全文
posted @ 2013-04-09 10:36 米其林轮船 阅读(115) 评论(0) 推荐(0) 编辑