linux pthread_create() 产生斐波那契数列

linux pthread_create() 产生斐波那契数列,第1张

1. pthread_join 是阻塞函数,运行该函数后主线程会阻春胡塞等待子线程 *** 作结束,你把pthread_join放在主线程输出之后,存在这样的问题:在子线运雹程还没赋值完成前,父线程已经把未 *** 作的值输出了。

2.传递参数错误,pthread_create传递的是"&a",也就是数组的起始地址的地址,你只是改变数组值,不需要对起始地址更改,完全可以传递 a,而且看你thread_fun函数应该传递的是a。

3. 最关键的,我纳闷怎么没输出,检查了下你的thread_fun才发现“for(k=2k<=512k++)”,数组越界了! 造成的结果是把n值直接给改了。。

修改版 (有warning, 最好把参数设成void *):

#include <stdio.h>

#include <string.h>

#include <stdlib.h>

#include <pthread.h>/*pthread_create()......*/

#include <unistd.h>

pthread_t ntid

void *thread_fun(int *p) {/*.......*/

int k

p[0] = 0

p[1] = 1

for(k=2k<512k++)

{

p[k] = p[k-1] + p[k-2]

}

return NULL

}

int main(void){

int err

int i,n

int a[512]

printf("旁森帆Please enter n:(n>=3 &n<=512) ")

scanf("%d",&n)

/*........*/

err=pthread_create(&ntid,NULL,thread_fun,(void *)a)

if (err!=0) {

fprintf(stderr, "......: %s\n", strerror(err))

exit(1)

}

pthread_join(ntid,NULL)/*...1.....*/

for(i = 0 i<=n i++){

printf("F[%d] = %d\n",i,a[i])

}

}

1. 用vi打开一个空文件,文件名随意,然迅含后在第一行写:

#!/bin/bash

另起一行跟上要使用的命令,比如ls date之类的,一条命令一行。

退出vi后,在命令行下输入 chmod +x 文件名 给文件增加运行权限

最后用 ./文件名 执行这个文件就可以了。

2. 环境变量用 env 和 set 2个命令可以看到,在亩首笑命令行下芹神直接输入就可以了,至于具体内容,太多,你得自己去查

3.

for 循环:

i=1

for i in 1..100do

i=$(($i + 1))

done

while循环

i=1

while [ $i -le 100 ]do

i=$(($i + 1))

done

算了,这些都能做,但做起来太麻烦,放弃了

先占下楼层,空了慢慢给你做!

先做第一题1月12日:

#!/bin/bash

echo this "date" :`date`

echo this "cal" :`cal`

echo this "pwd" :`pwd`

echo this "ls" : `ls`.

第二题衡运1月12日:

这个没法写了撒 太笼统;建议翻翻书。

我列个环境变量的例子吧:

#!/启拦握bin/bash

echo "第二题悄庆":

TEST_DIR=/root

export $TEST_DIR

echo "环境变量TEST_DIR是/root".

第三题1月12日:

#!/bin/bash

echo "第三题for":

echo "3.1 for"

x=0

for ((i=1 i<101 i++))

do

x=$(($x+$i))

done

echo $x

echo "---------------------------------"

echo "第三题while":

echo "3.2 while"

x=0

i=1

while [ $i -lt 101 ]

do

i=$(($i+1))

x=$(($x+$i))

done

echo $x

第三题第二个

#!/bin/bash

echo "3.2"

function fib {

if [ $1 -lt 2 ]then

echo -n $1

else

local n_2=$(($1 - 2))

local n_1=$(($1 - 1))

local f_n_2=$(fib $n_2)

local f_n_1=$(fib $n_1)

local f_n=$((f_n_2 + f_n_1))

echo -n $f_n

fi

}

n=10

for ((i = 0i <$ni++))

do

printf "fib(%2d) = %d\n" $i $(fib $i)

done


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12244893.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-22
下一篇 2023-05-22

发表评论

登录后才能评论

评论列表(0条)

保存