我是golang的新手,现在我想从地图中获取一个任意项目,这样做的惯用方法是什么?我只能想到如下:
func get_some_key(m map[int]int) int {
for k := range m {
return k
}
return 0
}
Run Code Online (Sandbox Code Playgroud)
我想要的原因是我使用地图来维护一组作业,并使用地图我可以获得待处理作业或删除O(1)中的已完成作业.我想这应该是一个常见的要求,但在go中做这件事并不明显.
提前致谢!
从gradle的文档来看,这似乎是两个独立的特征?
看看56.8部分,我不太清楚,如果测试将并行运行maxParallelForks=1.
如果这两个是独立的功能,我希望一个项目下的测试永远不会并行运行maxParallelForks=1,但是不同项目中的测试(因此属于不同的测试任务)可以并行运行(当--parallel使用gradle时)?
例如,如何合并两个已排序整数的Streams?我认为这是非常基本的,但只是发现它根本不重要.下面的一个不是尾递归的,当Streams很大时它会堆栈溢出.
def merge(as: Stream[Int], bs: Stream[Int]): Stream[Int] = {
(as, bs) match {
case (Stream.Empty, bss) => bss
case (ass, Stream.Empty) => ass
case (a #:: ass, b #:: bss) =>
if (a < b) a #:: merge(ass, bs)
else b #:: merge(as, bss)
}
}
Run Code Online (Sandbox Code Playgroud)
我们可能希望通过引入累加器将其转换为尾递归.但是,如果我们预先挂起累加器,我们只会得到一个逆序流; 如果我们用累加(#:: :)附加累加器,它就不再是懒惰(严格)了.
这可能是什么解决方案?谢谢
这是我的第一个pthread程序,我不知道为什么printf语句在子线程中打印两次:
int x = 1;
void *func(void *p)
{
x = x + 1;
printf("tid %ld: x is %d\n", pthread_self(), x);
return NULL;
}
int main(void)
{
pthread_t tid;
pthread_create(&tid, NULL, func, NULL);
printf("main thread: %ld\n", pthread_self());
func(NULL);
}
Run Code Online (Sandbox Code Playgroud)
在我的平台上观察到的输出(Linux 3.2.0-32-generic#51-Ubuntu SMP x86_64 GNU/Linux):
1.
main thread: 140144423188224
tid 140144423188224: x is 2
2.
main thread: 140144423188224
tid 140144423188224: x is 3
3.
main thread: 139716926285568
tid 139716926285568: x is 2
tid 139716918028032: x is 3
tid 139716918028032: x is …Run Code Online (Sandbox Code Playgroud) 我们有两个不同的测试类(每个类包含多个测试方法),它们在并行运行且在同一个jvm进程中时可能会相互影响。我知道这听起来很糟糕,但目前我们没有简单的解决方案来分离这两个测试类。
当我仍然希望使用 gradle --parallel 并行测试执行时,如何指定这两个测试类的运行顺序(使它们按顺序运行)?预先非常感谢。
[更新]:
我有以下配置
test {
// maxParallelForks=8
testLogging.showStandardStreams=true
exclude '**/ATests.scala'
exclude '**/BTests.scala'
}
task runATests(type: Test) {
include '**/ATests.scala'
}
task runBTests(type: Test) {
include '**/BTests.scala'
}
Run Code Online (Sandbox Code Playgroud)
如何验证 ATests 和 BTests 实际上是在不同的测试 JVM 中运行,从日志来看,似乎没有相关信息?谢谢
我正在检查'pthread_join'的行为并具有以下代码:
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <errno.h>
#include <pthread.h>
void *thread(void *vargp)
{
pthread_detach(pthread_self());
pthread_exit((void *)42);
}
int main()
{
int i = 1;
pthread_t tid;
pthread_create(&tid, NULL, thread, NULL);
sleep(1);
pthread_join(tid, (void **)&i);
printf("%d\n", i);
printf("%d\n", errno);
}
Run Code Online (Sandbox Code Playgroud)
在我的平台上观察到的输出(Linux 3.2.0-32-generic#51-Ubuntu SMP x86_64 GNU/Linux):
用'sleep(1)'注释掉:42 0
使用sleep语句,它产生:1 0
根据pthread_join的手册页,当我们尝试加入一个不可连接的线程时,我们应该得到错误' EINVAL ',但是,上面的两种情况都没有设置errno.而且在第一种情况下,似乎我们甚至可以获得分离线程的退出状态,我对结果感到困惑.有人能解释一下吗?谢谢
[编辑]:我意识到第一个printf可能会重置'errno',但是,即使我交换了两个'printf'语句的顺序后,我仍然得到了相同的结果.
gradle ×2
pthreads ×2
c ×1
dictionary ×1
go ×1
junit ×1
printf ×1
pthread-join ×1
scala ×1
stream ×1