C:同时运行两个函数?

C:同时运行两个函数?,c,multithreading,function,C,Multithreading,Function,我在C中有两个函数: void function1(){ // do something } void function2(){ // do something while doing that } 如何同时运行这两个函数? 如果可能,请提供一个例子 您将使用线程 例如,pthreads是一个用于多线程的c库 你可以看看这个来了解更多细节 下面是一个从中生成pthreads的程序示例 #包括 #包括 #定义NUM_线程5 void*PrintHello(void*thread

我在C中有两个函数:

void function1(){
    // do something
}

void function2(){
    // do something while doing that
}
如何同时运行这两个函数? 如果可能,请提供一个例子

您将使用线程

例如,pthreads是一个用于多线程的c库

你可以看看这个来了解更多细节

下面是一个从中生成pthreads的程序示例

#包括
#包括
#定义NUM_线程5
void*PrintHello(void*threadid)
{
长tid;
tid=(长)线程ID;
printf(“你好,世界!是我,线程#%ld!\n”,tid);
pthread_exit(NULL);
}
int main(int argc,char*argv[])
{
pthread_t threads[NUM_threads];
int rc;
长t;

对于(t=0;t对于“同时”的近似值,您可以在自己的线程中执行每个函数(有关更多信息,请参阅)


如果您需要确保这两个函数以某种同步方式执行操作,您将需要了解同步原语,如互斥体、信号量和监视器。

不可能以标准方式执行。您将需要依赖某些第三方方法。即,或

POSIX示例:

#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>

void* print_once(void* pString)
{
    printf("%s", (char*)pString);

    return 0;
}

void* print_twice(void* pString)
{
    printf("%s", (char*)pString);
    printf("%s", (char*)pString);

    return 0;
}

int main(void)
{
    pthread_t thread1, thread2;

    // make threads
    pthread_create(&thread1, NULL, print_once, "Foo");
    pthread_create(&thread2, NULL, print_twice, "Bar");

    // wait for them to finish
    pthread_join(thread1, NULL);
    pthread_join(thread2, NULL); 

    return 0;
}
#包括
#包括
#包括
作废*打印一次(作废*打印)
{
printf(“%s”,(char*)pString);
返回0;
}
作废*打印两次(作废*打印)
{
printf(“%s”,(char*)pString);
printf(“%s”,(char*)pString);
返回0;
}
内部主(空)
{
pthread_t thread1,thread2;
//制线
pthread_创建(&thread1,NULL,打印一次,“Foo”);
pthread_创建(&thread2,NULL,打印两次,“Bar”);
//等待他们完成
pthread_join(thread1,NULL);
pthread_join(thread2,NULL);
返回0;
}
Win32示例:

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>

DWORD print_once(LPVOID pString)
{
    printf("%s", (char*)pString);

    return 0;
}

DWORD print_twice(LPVOID pString)
{
    printf("%s", (char*)pString);
    printf("%s", (char*)pString);

    return 0;
}

int main(void)
{
    HANDLE thread1, thread2;

    // make threads
    thread1 = CreateThread(NULL, 0, print_once, "Foo", 0, NULL);
    thread2 = CreateThread(NULL, 0, print_once, "Bar", 0, NULL);

    // wait for them to finish
    WaitForSingleObject(thread1, INFINITE);
    WaitForSingleObject(thread2, INFINITE);

    return 0;
}
#包括
#包括
#包括
DWORD打印一次(LPVOID pString)
{
printf(“%s”,(char*)pString);
返回0;
}
DWORD打印两次(LPVOID pString)
{
printf(“%s”,(char*)pString);
printf(“%s”,(char*)pString);
返回0;
}
内部主(空)
{
手柄螺纹1、螺纹2;
//制线
thread1=CreateThread(NULL,0,打印一次,“Foo”,0,NULL);
thread2=CreateThread(NULL,0,打印一次,“Bar”,0,NULL);
//等待他们完成
WaitForSingleObject(线程1,无限);
WaitForSingleObject(线程2,无限);
返回0;
}

如果你想在两种平台上都使用POSIX的Windows端口。

没有下载它的链接吗?默认情况下包括吗?如果你在linux上,是的,不知道还有多少其他内容。谷歌有一些下载它的点击率。@Daniel:你可能已经有可用的pthreads了-如果你说明你是什么操作系统和编程环境,这会有所帮助这是一个linux标准库,虽然有一个半完整的。跨平台线程在C中是出了名的恼人,但是Boost有一个C++库。很抱歉,我没有这么说,我使用的是mac os x 10.6,线程是否真正同时运行取决于硬件(您的硬件是否有多个独立的执行核心)而操作系统(操作系统是否同时调度两个线程)。“同时”通常意味着“显然同时”;在这一刻,我在写这篇评论,“wget正在下载一些东西”,而“…ps列出了50个左右运行的“东西”…显然都在“同一时间”;如果有些可以真正并行或不并行,这取决于……尽管如此,几乎所有这些都可以“在硬件上并行”,但从用户的角度来看,我们仍然认为多任务处理是“在同一时间”执行的,即使我们在单核cpu上运行它。我相信OPer打算用fork和threads实现
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>

DWORD print_once(LPVOID pString)
{
    printf("%s", (char*)pString);

    return 0;
}

DWORD print_twice(LPVOID pString)
{
    printf("%s", (char*)pString);
    printf("%s", (char*)pString);

    return 0;
}

int main(void)
{
    HANDLE thread1, thread2;

    // make threads
    thread1 = CreateThread(NULL, 0, print_once, "Foo", 0, NULL);
    thread2 = CreateThread(NULL, 0, print_once, "Bar", 0, NULL);

    // wait for them to finish
    WaitForSingleObject(thread1, INFINITE);
    WaitForSingleObject(thread2, INFINITE);

    return 0;
}