小编Lee*_*ton的帖子

安全线程堆栈大小?

我正在编写一些产生相当多线程的代码(目前约为512,但未来可能会更高).每个线程只执行少量操作,因此我希望线程在系统上的开销保持在最低限度.

我正在设置堆栈大小pthread_attr_setstacksize(),我可以从中获得最小的允许堆栈大小PTHREAD_STACK_MIN.但我的问题是:使用PTHREAD_STACK_MIN线程堆栈大小是否安全?我如何计算我需要多少堆栈?是否有任何隐藏的开销需要添加到我的计算中?

此外,还有其他技术可以用来减少线程在系统上的负担吗?

c pthreads stack-size

5
推荐指数
3
解决办法
4760
查看次数

bash将输出存储为变量

grep -A 26 "some text" somefile.txt |
   awk '/other text/ { gsub(/M/, " "); print $4 }' |
   sort -n -r | uniq | head -1
Run Code Online (Sandbox Code Playgroud)

将返回从大文本文件中提取的列表中的最大值,但如何将输出存储为变量?

linux bash

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

使用换行符时 Bash 读取函数返回错误代码

我有一个脚本,我要从中返回多个值,每个值都在一个新行上。为了将这些值捕获为 bash 变量,我使用了read内置函数(如这里推荐的那样)。

问题是,当我使用换行符作为 的分隔符时read,我似乎总是得到一个非零的退出代码。这对我检查操作结果的其余脚本造成了严重破坏。

这是我正在做的事情的简化版本:

$ read -d '\n' a b c < <(echo -e "1\n2\n3"); echo $?; echo $a $b $c
1
1 2 3
Run Code Online (Sandbox Code Playgroud)

注意退出状态 1。

我不想重写我的脚本(echo上面的命令)以使用不同的分隔符(因为在代码的其他地方使用新行是有意义的)。

read当它成功读取 3 个值时,我如何玩得很好并返回零退出状态?

更新

嗯,看来我可能错误地使用了“分隔符”。从手册页:

-d *delim* 

  The first character of delim is used to terminate the input line,
  rather than newline.
Run Code Online (Sandbox Code Playgroud)

因此,我可以达到预期结果的一种方法是这样做:

read -d '#' a b c < <(echo -e "1\n2\n3\n## END ##"); echo $?; echo $a $b $c …
Run Code Online (Sandbox Code Playgroud)

bash built-in io-redirection

5
推荐指数
2
解决办法
995
查看次数

ctags可以遵循#include指令吗?

我试图在我的Makefile中创建一个目标,tags使用ctags 自动创建一个文件.

我有一个源文件列表(.cpp文件),但我没有所有头文件g++ -MM的列表(我用来创建头依赖项列表).

我会假设ctags #include在生成标签时会遵循.cpp文件中的任何指令,但似乎我的假设是错误的.

如果我创建一个这样的简单标签文件:

ctags  --fields=+iaS --extra=+q myClass.cpp
Run Code Online (Sandbox Code Playgroud)

然后进入vim并输入一个对象的名称,后跟一个'.' 我收到错误"Pattern not found".

但是,如果我像这样编译标签文件:

ctags  --fields=+iaS --extra=+q myClass.cpp myClass.h
Run Code Online (Sandbox Code Playgroud)

并在vim中做同样的事情我得到一个可爱的自动完成的成员变量/函数列表.

我的'myClass.cpp'文件中的第一行是

#include "myClass.h"
Run Code Online (Sandbox Code Playgroud)

那么为什么ctags也没有使用它来解析头文件呢?

vim ctags

4
推荐指数
1
解决办法
4790
查看次数

有简洁的方法在C中创建位掩码吗?

我需要创建三个32位的掩码unsigned ints(让我们称之为x,y和z).面具应该像这样结束:

x: 0000 0001 1111 1111 1111 1111 1111 1111
y: 0000 1110 0000 0000 0000 0000 0000 0000
z: 1111 0000 0000 0000 0000 0000 0000 0000
Run Code Online (Sandbox Code Playgroud)

到目前为止,我有这个:

unsigned int x = (1<<25)-1;
unsigned int y = (~x)&((1<<28)-1);
unsigned int z = (~x)<<3;
Run Code Online (Sandbox Code Playgroud)

但它似乎有点凌乱.任何人都可以提出更简洁(和可读)的方式吗?

c readability bit-manipulation bit-masks

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

GLES20.glUniform4fv给出了GL_INVALID_OPERATION(1282)

我在将一小部分vec4s向上传到GPU 时遇到了一些问题.我把这个问题煮到了最小的代码来抛出错误.

这是我的片段着色器:

precision mediump float;
uniform vec4 test[5];
void main() {
    gl_FragColor = test[0]+test[1]+test[2]+test[3]+test[4];
}
Run Code Online (Sandbox Code Playgroud)

顶点着色器很简单:

attribute vec4 vPosition;        
void main(){
    gl_Position = vPosition;
}
Run Code Online (Sandbox Code Playgroud)

以下是尝试上传vec4矢量的代码:

    float[] testBuffer = new float[4*5];
    // Fill with 1/5s for now
    Arrays.fill(testBuffer, 0.2f);

    // Get the location
    int testLoc = GLES20.glGetUniformLocation(mProgram, "test");
    checkGlError("glGetUniformLocation test");

    // Upload the buffer
    GLES20.glUniform4fv(testLoc, 5, testBuffer, 0);
    checkGlError("glUniform4fv testBuffer");
Run Code Online (Sandbox Code Playgroud)

第二次调用时发现错误checkGlError(),错误代码为GL_INVALID_OPERATION.

我已经阅读了关于glUniform的文档,所有的大小和类型看起来都是正确的.testLoc是一个有效的位置句柄,上传片段和顶点着色器代码时没有错误.

我只是看不出我做错了什么!有任何想法吗?

- 更新

android opengl-es-2.0

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

为什么git-svn clone将'master'设置为随机分支?

我正在尝试将现有的svn存储库移动到git.我们不需要在两者之间进行任何同步(所以没有git svn fetches或dcommits) - 我们只是移动过来就是这样.

我发出此命令来创建git存储库:

git svn clone -s https://server/repos/my_repo
Run Code Online (Sandbox Code Playgroud)

这很好.但是,当我cd进入新my_repo目录时,其中的文件是其中一个分支(不是主干)的一部分.

做一个git branches -a收益率:

* master
  modelExperimentalTrunk
  modelExperimentalTrunk@719
  dRefactoring
  reorganise
  stableV396
  tags/v1.0
  trunk
Run Code Online (Sandbox Code Playgroud)

我在主分支上,但是我的沙箱中的文件实际上来自dRefactoring分支(我们较为模糊的分支之一).

问题:

  • 为什么master分支机构没有连接trunk
  • 有没有办法重新连接到trunk?或者可以在git svn clone舞台上完成吗?
  • 此外,鉴于这将在服务器上,有没有办法git svn可以创建一个--bare存储库?

svn git version-control git-svn

2
推荐指数
1
解决办法
1752
查看次数

这个递归如何在python中工作?

几个小时前我在python的递归中观看了一段视频,然后重新创建了在视频中制作的程序,因此它在我的Python版本中运行.代码可以工作,但有一点我不完全理解它正在做什么.

def lower(s):
    s = s.lower()
    return s

def isPal(s):
    if len(s) <= 1:
        return True
    else:
        return s[0] == s[-1] and isPal(s[1:-1])

def isPalindrome(s):
    if isPal(lower(s)) == True:
        print("{0} is a palindrome".format(s))
Run Code Online (Sandbox Code Playgroud)

我遇到问题的部分是

return s[0] == s[-1] and isPal(s[1:-1])
Run Code Online (Sandbox Code Playgroud)

我想知道为什么他们被退回,为什么它是[1:-1]而不是s [0:-1]如果你认为你知道任何有助于简化递归的好地方我随意分享他们.提前致谢.

python recursion palindrome python-3.x

2
推荐指数
1
解决办法
702
查看次数