我在C中有两个程序几乎相同(略有不同),并且在另一个C文件中有(键/值)字典
两个程序都完成了以下步骤
编译第一个程序
gcc file1.c dict.c
编译第二个程序
gcc file2.c dict.c
在文件内部。我调用了两个函数update(填充字典)和printDic(打印字典的内容)
//file1.c
int func(int w){
update("w",w)
if ((w >= w) && ((w % w) == 0))
{
w= w*4
update("w",w)
printDic();
}
else
{
w=1;
update("w",w)
printDic();
}
return 0; }
//file2.c
int func(int w){
update("w",w)
if ((w >= 4) && ((w / w) == 0))
{
w = w/2;
update("w",w)
printDic();
}
else
{
w=0;
update("w",w)
printDic();
}
return 0; }
并且两个文件都具有相同的主
//main
int main(int argc, char *argv[]){
func(10);
func(5);
func(2);
func(0);
func(180);
return 0; }
因此,一旦w的值发生更改,update()就会在字典中填充w的值,然后将其打印出来。
是否可以同时使用字典运行这两个文件,以便比较输出,例如如果我在两个程序中都传递10,将最终得到不同的w值(存储在字典中)。
注意:我需要多次调用func,并且在同一文件中,我不想每次只调用一次就运行该程序。
该词典在处理一个文件时效果很好,在每次调用func时,w的值都会附加到txt文件中。
答案 0 :(得分:1)
您可以使用线程来实现您的目标,例如:
#include "pthread.h"
#include <stdio.h>
#define bool int
#define true 1
#define false 0
#define thread pthread_t
#define thread_fire pthread_create
#define thread_wait pthread_exit
int get_mul(int num, bool even)
{
if (even)
return (2 * num);
else
return ((2 * num) + 1);
}
void* func_odd(void *arg)
{
int num = *((int *)arg);
printf("%s: [%d]\n", __func__, get_mul(num, false));
return NULL;
}
void* func_even(void *arg)
{
int num = *((int *)arg);
printf("%s: [%d]\n", __func__, get_mul(num, true));
return NULL;
}
void func(int num)
{
thread tid;
thread_fire(&tid, NULL, func_odd, (void *)&num);
thread_fire(&tid, NULL, func_even, (void *)&num);
thread_wait(NULL);
}
int main(int argc, char **argv)
{
int i, num = atoi(argv[1]);
func(num);
return 0;
}
**compiling:**
gcc -g -c thread.c
gcc -o thread thread.o -lpthread
**Output:**
./thread 3
func_odd: [7]
func_even: [6]
在上面的示例中,将func_odd()和func_even()替换为在两个不同文件中定义的两个函数(具有相同的名称)。
例如,您可以将“ func_odd”调用为“ func_file1”,将“ fund_even”调用为“ func_file2”。
多线程的力量!!!!