小编Sha*_*dor的帖子

C++ 11 std :: threads vs posix threads

为什么我在练习中更喜欢一个或另一个?什么是技术差异,除了std::thread是一个类?

c++ multithreading pthreads c++11

143
推荐指数
4
解决办法
7万
查看次数

根据Stroustrup的矢量vs列表

可能重复:
您何时更喜欢使用std :: list <T>而不是std :: vector <T>?

我刚观看了Bjarne Stroustrup对GoingNative'12演讲的录音.我有点困惑.

在本次演讲中,他特别讨论了vectorvs list问题,并建议在很多情况下vector即使你从中间插入和删除也要更快,因为编译器可以优化很多东西并且喜欢紧凑的结构.结论(据我所知)是:首先使用,vector然后再考虑是否需要其他东西.这听起来很合理,但考虑到第一次观察,我应该考虑哪些标准?我一直认为,如果你强烈插入/删除 - 使用列表.这里的一些主题也提出了类似的建议.看到

std :: vector与std :: list与std :: slist的相对表现?

STL中的向量与列表

现在根据Stroustrup我错了.

当然,我可以编写几个测试并试图弄清楚在每种特定情况下使用什么,但是有理论上的方法吗?

c++ stl list vector

13
推荐指数
1
解决办法
2452
查看次数

信号中断的系统调用仍然需要完成

许多系统调用都close( fd )可以被信号中断.在这种情况下,通常-1会返回并errno设置EINTR.

问题是做什么是正确的?说,我仍然希望fd关闭它.

我能想到的是:

while( close( fd ) == -1 )
  if( errno != EINTR ) {
    ReportError();
    break;
  }
Run Code Online (Sandbox Code Playgroud)

任何人都可以建议更好/更优雅/标准的方式来处理这种情况吗?

更新:正如mux所注意到的,RESTART在安装信号处理程序时可以使用SA_ 标志.有人可以告诉我哪些功能可以保证在所有POSIX系统上都可以重启(不仅仅是Linux)?

c c++ unix interrupt eintr

11
推荐指数
1
解决办法
3858
查看次数

终止被称为递归

据我所知,terminate()当异常处理存在一些问题时调用(通常它没有被捕获).我得到的只是一个错误行terminate called recursively.

谷歌搜索了一段时间后,我发现了很多例子

terminate called after throwing an instance of ... terminate called recursively
Run Code Online (Sandbox Code Playgroud)

但这不是我的情况.由于我没有关于异常类型的这一提示,我想知道这terminate called recursively本身意味着什么.

对不起,我无法提供代码,所以任何猜测都会有所帮助.我正在使用Ubuntu 11.04下的g ++ 4.5.2进行编译.

非常感谢,Alex.

c++ linux exception-handling

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

如何遍历Bash中的所有ASCII字符?

我知道如何迭代字母表:

for c in {a..z}; do ...; done
Run Code Online (Sandbox Code Playgroud)

但我无法弄清楚如何遍历所有ASCII字符.有谁知道怎么样?

linux bash ascii

6
推荐指数
3
解决办法
7463
查看次数

在poll上添加/删除描述符的优雅方法

我必须在一个处理大约1000个描述符poll(我不能使用epoll它特定于Linux),我必须能够动态添加/删除它们(处理新连接并删除关闭).

这意味着我应该在每次迭代时重新组合描述符数组.

从技术角度来看,这是显而易见的,但有人知道这样做的一种美妙方式吗?

c c++ unix polling

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

使用os.system()调用的Python线程.主线程不会在ctrl + c上退出

请不要在阅读之前认为它是重复的,有很多关于multithreading和的问题keyboard interrupt,但我没有发现任何考虑os.system,它看起来很重要.

我有一个python脚本,它在工作线程中进行一些外部调用.我希望它退出,如果我按,ctrl+c但看起来主线程忽略它.

像这样的东西:

from threading import Thread
import sys
import os

def run(i):
    while True:
        os.system("sleep 10")
        print i

def main():
    threads=[]
    try:
        for i in range(0, 3):
            threads.append(Thread(target=run, args=(i,)))
            threads[i].daemon=True
            threads[i].start()
        for i in range(0, 3):
            while True:
                threads[i].join(10)
                if not threads[i].isAlive():
                    break

    except(KeyboardInterrupt, SystemExit):
        sys.exit("Interrupted by ctrl+c\n")


if __name__ == '__main__': 
    main() 
Run Code Online (Sandbox Code Playgroud)

出人意料的是,如果我改变它工作正常os.system("sleep 10")time.sleep(10).

python multithreading os.system keyboardinterrupt

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

新分配了多少字节?

可能重复:
如何在malloc之后获取内存块长度?

如果我有一个指针,是否可以了解分配了多少字节new?当我用Google搜索时,我找到了适用于Windows的解决方案:_msize()对于Mac : malloc_size(). 但Linux没什么.

如果没有,有人知道为什么它对程序员隐藏了吗?delete应该知道这样的信息.

更新:

据我所知,如果我有这个代码:

 class A {   
   ~A() {}
   int m_a; 
 }; 
 class B : public A {
   ~B() {}
   int m_b; 
 };

 int main() {   A * b = new B();   delete b;   return 0; }
Run Code Online (Sandbox Code Playgroud)

将调用A的析构函数,但仍将new释放所有分配的内存.这意味着它可以以某种方式计算只知道指针.那么将它从程序员中隐藏起来的原因是什么?

c++ linux memory-management

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

复制稀疏文件

我正在尝试理解Linux(UNIX)低级接口,并且想要编写一个代码,将带有空洞的文件复制到一个新文件中(再次使用孔).

所以我的问题是,如何读取第一个文件直到第一个洞,但直到文件的最后?如果我没弄错的话,read()到达第一洞(EOF)时返回0.

我正在考虑逐字节地寻找并试图读取这个字节,但是我必须事先知道漏洞的数量.

c linux file-io

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

在简单的情况下同时写入和读取布尔值的危险

我已经阅读了一些类似的问题,但那里描述的情况有点复杂.

我在堆中有一个bool b初始化false和两个线程.我确实理解操作boolsnot atomic,但请直到最后阅读问题.

第一个线程只能设置b = true一次,不会对它做任何其他事情.第二个线程检查b一个循环,如果它true做了一些动作.

我是否需要使用某些同步机制(如互斥锁)来保护b?如果我不这样做会怎么样?随着ints我能明显得到任意值,当我读到,并在同一时间写.但是,bools只有true而且false我不介意一次得到false而不是true.这是一种潜力SIGSEGV吗?

c++ multithreading nonatomic

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

是否设置了set-user-id位?

我将编写一个代码,它将广泛执行其他程序.如果有人设置了set-user-id位(并且root是所有者),我不希望它具有root权限.所以我要在启动时放弃权限.

我的问题是:如何在程序中理解它是否以set-user-id模式运行?

c c++ unix suid

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

间接操作符是否会更改内存表示?

好吧,我觉得这很愚蠢,但为什么下面的代码输出不同的行?

要打印第一行,我将地址写入数组的第一个字节,将其解释为指向uint16_t的指针,取值并逐个打印它的位.

对于第二行,我使用指向第一个字节的指针,将其解释为指向uint8_t的指针,取值并逐个打印它的位.然后对第二个字节执行相同的操作.

因为我不修改为数组分配的内存,只能以不同的方式解释它,我期望输出相同,但字节的顺序是不同的.

我可能会错过一些东西,但我唯一的猜测是间接运算符做了我不期望的事情.

#include <iostream>
#include <string.h>


 int main() {
   uint8_t u[2];
   u[0] = 170;
   u[1] = 85;

  for(int i = 15; i >= 0; --i) {
    printf( "%u", (((*((uint16_t*)u)) >> i) & 0x0001));
  }
  printf( "\n");
  for(int i = 7; i >= 0; --i) {
    printf( "%u", (((*((uint8_t*)u)) >> i) & 0x01));
  }
  for(int i = 7; i >= 0; --i) {
    printf( "%u", (((*((uint8_t*)(u + 1))) >> i) & 0x01));
  }
}
Run Code Online (Sandbox Code Playgroud)

Outout

0101010110101010 
1010101001010101
Run Code Online (Sandbox Code Playgroud)

更新#1:请忽略分配,是示例代码不适用于每个操作系统,但它只是一个简化的示例. …

c++ memory uint8t

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

onclick设置为<tr>如何禁用一个<td>

假设onclick处理程序设置为a <tr>是否可以为一个特定禁用/覆盖它<td>

<tr onclick='somefunction()'> <td> </td> <!--onclick should work here--> ... <td> </td> <!--onclick should not work here--> ... <td> </td> <!--onclick should work here--> </tr>

当然,我可以<td>单独为它们设置它,或者将a的名称传递td给函数,并根据这个名称决定做什么,但似乎应该有一个更简单的解决方案.

javascript onclick

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