类似于pthread的函数

时间:2014-01-23 08:50:19

标签: multithreading r

我想用R做一些多线程。我已经习惯了C pthread功能。我想做的是:

#initialisation
n=10
A <- numeric(n)

i=c(1:n/2)

# compute some indexes using the one function fun1
# equivalent in C with correct initialisation of t1 and attr: 
## pthread_create(&t1, &attr, fun1, i)
A[i] <- fun1(length(i))

# compute other indexes using another function fun2
# equivalent in C with correct initialisation of t2 and attr: 
## pthread_create(&t2, &attr, fun2, i)
A[-i] <- fun2(n-length(i))

# wait for the thread to finish
# equivalment in C:
## pthread_join(t1); pthread_join(t2)

# do something with the result
A

fun1和fun2这两个函数是完全独立的我不认为使用fork()是合适的,因为我想在完成下一步之前等待所有线程完成。结果包含2个函数fun1fun2

1 个答案:

答案 0 :(得分:0)

  • 你是否遍历i?如果是,那么您是否也可以依次评估每个fun1的{​​{1}}和fun2?在这种情况下,使用i包和i之类的并行后端在foreach上构建一个循环。像

    doMC
  • 否则,构建一个伪功能,您将通过切换,告诉它require(foreach) require(doMC) A <- foreach( i = 1:(n/2), .combine=rbind) %dopar% {c(fun1(i),fun2(i))} fun1运行哪个

    fun2

    还构建一个带有对于fun1和fun2的arguemnts的列表。并将其放入switchingFun <- function( .., selFun=1){ if(selFun == 1){ fun1( ...)} else {fun2(... ) } 循环中。 (foreach( selFun in 1:2) %dopar% {switchingFun( arguments[[selFun]], selFun)}非常有用,我只是尝试过了!)

    您将/可能/应该看看您调用的函数,您可能需要在传递它之前对参数列表执行某些操作(获取正确的类型,解开它...)...函数

  • switchingFun(可能)不会按照您想要的方式运作。在R中,A[-i]选择A[-i]所有 索引的元素...