全部博文(1493)
发布时间:2012-12-11 17:28:07
编写多线程编程面临的一个最具挑战性的问题就是如何让一个线程和另一个线程协同工作,避免出现竞争条件(race condition)和数据破坏(data corruption)。为了使应用程序中的多个线程协同工作,线程需要根据应用需求在某些特定情况下进行必要的互斥和同步。 下面的代码是读写操作的最小化模型,简单的阐述如下: 利用设计的系统是ARM使用一个线程从FPGA中读取数据,在另一个线程从FPGA中将数据转发给其他模块,就可以利用两个信号量完成两个线程之间的同步. 需要注意的是: 在实际的操作中有时需要对接收数据进行一系列的处理和拼接,注意不满足条件时信号量的释放,否则程序就会 ......【阅读全文】
发布时间:2012-12-11 17:27:59
从终端输入数据较多时,我们多会选择从文件读入。有时测试为了省事,会偷懒先不写文件读写的代码,通过shell的重定向模拟。比如,int i;while (scanf ("%d", &i) != EOF) printf ("%d\n", i);如果输入的文件在data.in中,可以用下面命令从“文件”读入输入数据,$ cat data.in | ./test或$ ./test <data.in 用gdb调试时也可以这么干,用下面命令即可。$ gdb ./test运行,$ run <data.in开始单步,$ star......【阅读全文】
发布时间:2012-12-11 17:27:51
共享存储共享存储允许两个或更多进程共享一个给定的存储段。因为数据部需要在客户进程和服务进程之间复制,所以这是最快的一种IPC。使用共享存储时要掌握的唯一敲门时多个进程之间对一个给定存储区的同步访问。若服务器进程正在将数据放入共享存储区,则在它完成这一操作之前,客户进程不应当去取这些数据。通常,信号量被用来实现对共享存储区的同步访问。共享内存要用到一下几个函数:key_t ftok(char *path,int id)注意:这个函数是获取一个键值,path要为一个具体存在的路径名,id要为一个宏例如:#define number 255key=ftok("/dev/null",number) ......【阅读全文】
发布时间:2012-12-11 11:46:01
Linux下的线程是一个非常复杂的问题,这里只是简单的介绍线程的创建和基本的使用。先介绍什么是线程.我们编写的程序大多数可以看成是单线程的.就是程序是按照一定的顺序来执行.如果我们使用线程的话,程序就会在我们创建线成的地方分叉,变成两个"程序"在执行.粗略的看来好象和子进程差不多的,其实不然.子进程是通过拷贝父进程的地址空间来执行的.而线程是通过共享程序代码来执行的,讲的通俗一点就是线程的相同的代码会被执行几次.使用线程的好处是可以节省资源,由于线程是通过共享代码的,所以没有进程调度那么复杂. 线程的创建和使用 线程的创建是用下面的几个函数来实现的. #include <......【阅读全文】
发布时间:2012-12-11 11:45:52
一、malloc()和free()的基本概念以及基本用法: 1、函数原型及说明: void *malloc(long NumBytes):该函数分配了NumBytes个字节,并返回了指向这块内存的指针。如果分配失败,则返回一个空指针(NULL)。 关于分配失败的原因,应该有多种,比如说空间不足就是一种。 void free(void *FirstByte): 该函数是将之前用malloc分配的空间还给程序或者是操作系统,也就是释放了这块内存,让它重新得到自由。 2、函数的用法: 其实这两个函数用起来倒不是很难,也就是malloc()之后觉得用够了就甩了它把它给free()了,举个简单例子:......【阅读全文】