要实现完全的并发执行,在一个CPU下实际上是不可能的
创新互联坚实的技术研发基础赢得了行业内的良好口碑,公司成立十余年来,为千余家企业提供过网站建设、软件开发、搜索引擎优化技术、互联网大数据整合营销服务,多年的技术服务成功经验、众多的客户使我们能懂得更多,做得更好。"让您的网站跑起来"是我们一直追求的目标!
所说的并发,都是在同一个时间段内
多个任务开始,交替占用CPU,最终结束。
也就是前一个任务还没结束,后一个任务就开始了,一种并发的形式而已。
所以 要么使用多线程
要么 手动模拟这种多线程。
前者更常用。
c语言中一个完整的函数由函数首部和函数体构成,而且定义函数时两者都是必不可少的。
函数定义的一般形式如下:
类型标识符
函数名(形参表列)
//
这是函数首部
//
以下{
}内的是函数体
{
说明部分
执行部分
}
举例说明如下:
//
定义一个不带返回值的函数
//
函数功能:输出形参的值
void
fun(int
a,
int
b)
{
printf("%d,
%d\n",
a,
b);
}
//
定义一个带返回值的函数
//
函数功能:返回2个整数数的最大值
int
fun(int
a,
int
b)
{
return
ab
?
a
:
b;
}
这是一个操作系统中进程同步典型的消费者-生产者问题,一般的解法就是按照你这样来做,给缓冲区上锁,写操作完成或者读操作完成以后就解锁,这种问题涉及线程间的通讯,只能够通过两个线程的交互来实现通讯,目前你看起来复杂,但是用得多了,也就不复杂了。线程1“通知”线程2,或者线程2“通知”线程1,其实要利用信号量机制,需要调用wait()与signal()函数,除此之外,还可以利用管程机制来实现线程之间的通讯,深入理解的话建议看看操作系统有关进程同步的教材。
到底是什么意思呢?
像这样吗?
struct
SLIST
a,b,c,*p;
a.data='a';
b.data='b';
c.data='c';
p=a;
a.next=b;
b.next=c;
c.next='\0';
if(p==‘\0’)//这样应该是0而不是O
printf(“Linklist
is
null!\n”);/*链表为空(只有头结点)*/
else
/*链表非空*/
{
printf(“head”);
do
{printf(“-%d”,p-data);/*输出当前结点数据域中的值*/
p=p-next; /*p指向下一个结点*/
}
while(p!=‘\0’); /*未到链表尾,继续循环*/
printf(“-end\n”);
同时执行,使用线程了
C语言本身没有提供线程的功能,只能调用平台的线程来实现
如果在 WINDOWS 下面,可以参考一下 CreateThread 方法
在Win32程序中,可以使用多线程来实现,但是那个比较复杂,不太容易在短时间内掌握。