小编chu*_*333的帖子

从地图中获取任意键/项

我是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中做这件事并不明显.

提前致谢!

dictionary go

39
推荐指数
4
解决办法
3万
查看次数

gradle --parallel和maxParallelForks

从gradle的文档来看,这似乎是两个独立的特征?

看看56.8部分,我不太清楚,如果测试将并行运行maxParallelForks=1.

如果这两个是独立的功能,我希望一个项目下的测试永远不会并行运行maxParallelForks=1,但是不同项目中的测试(因此属于不同的测试任务)可以并行运行(当--parallel使用gradle时)?

parallel-processing gradle

10
推荐指数
1
解决办法
3875
查看次数

合并两个Streams(已排序)以获取最终排序的Stream

例如,如何合并两个已排序整数的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)

我们可能希望通过引入累加器将其转换为尾递归.但是,如果我们预先挂起累加器,我们只会得到一个逆序流; 如果我们用累加(#:: :)附加累加器,它就不再是懒惰(严格)了.

这可能是什么解决方案?谢谢

scala tail-recursion stream lazy-evaluation

6
推荐指数
1
解决办法
2474
查看次数

pthread:一个printf语句在子线程中打印两次

这是我的第一个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)

printf pthreads

5
推荐指数
1
解决办法
2930
查看次数

使用 gradle --parallel 运行测试时按顺序运行两个测试类

我们有两个不同的测试类(每个类包含多个测试方法),它们在并行运行且在同一个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 中运行,从日志来看,似乎没有相关信息?谢谢

junit gradle

5
推荐指数
1
解决办法
8487
查看次数

pthread:加入一个分离的线程没有正确设置errno

我正在检查'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):

  1. 用'sleep(1)'注释掉:42 0

  2. 使用sleep语句,它产生:1 0

根据pthread_join的手册页,当我们尝试加入一个不可连接的线程时,我们应该得到错误' EINVAL ',但是,上面的两种情况都没有设置errno.而且在第一种情况下,似乎我们甚至可以获得分离线程的退出状态,我对结果感到困惑.有人能解释一下吗?谢谢

[编辑]:我意识到第一个printf可能会重置'errno',但是,即使我交换了两个'printf'语句的顺序后,我仍然得到了相同的结果.

c pthreads pthread-join

3
推荐指数
1
解决办法
3066
查看次数