草庐IT

thread_posixs

全部标签

linux - 从多个进程追加到单个文件的 "Thread safety"?

假设我有X个进程打开文件Y进行追加。每个进程当时只写一行(带有\n)(真正的日志条目)。是否保证文件Y中的每一行都不会被错误地交错?更新:本地附加文件系统。 最佳答案 问题取决于正在进行的写入类型。如果您正在使用带缓冲的标准I/O,这通常是大多数程序的默认设置,那么缓冲区将仅在写入几行后才被刷新,并且刷新时不一定是整数行。如果您正在使用write(2)或已将默认的stdio缓冲更改为行或无缓冲,那么只要行的大小合理(当然如果行小于512字节),它可能会正确交错。 关于linux-从多个进

linux - 内存 CAS、mmap 和 Posix 读/写的交互

如果重要的话,所有这些都是指Linux,内核版本3.13,以防Posixen之间存在不同的行为-尽管如果有人知道其他变体的情况,那将会很有趣。我目前的理解是:Posixread(2)和write(2)调用相互之间是原子的(这是Posix标准强制要求的)。如果我在该位置同时读取()一些字节和写入(),我将看到全部或没有。编辑:查看评论,对于许多文件系统,它只是按页面原子化。write(2)调用对于mmap是原子的——如果我write()到一些字节,同时通过mmap读取缓冲区,我将看到所有写入或没有写入(我相信这是并非由Posix严格强制要求,而是Linux和许多其他操作系统管理页面缓存的

linux - 内存 CAS、mmap 和 Posix 读/写的交互

如果重要的话,所有这些都是指Linux,内核版本3.13,以防Posixen之间存在不同的行为-尽管如果有人知道其他变体的情况,那将会很有趣。我目前的理解是:Posixread(2)和write(2)调用相互之间是原子的(这是Posix标准强制要求的)。如果我在该位置同时读取()一些字节和写入(),我将看到全部或没有。编辑:查看评论,对于许多文件系统,它只是按页面原子化。write(2)调用对于mmap是原子的——如果我write()到一些字节,同时通过mmap读取缓冲区,我将看到所有写入或没有写入(我相信这是并非由Posix严格强制要求,而是Linux和许多其他操作系统管理页面缓存的

linux - POSIX 消息队列 - mq_send 线程唤醒顺序

有人可以向我解释消息队列如何处理多个唤醒线程阻塞在单个消息队列上?我的情况是我有多个作者阻塞了一条完整的消息队列,每个发布消息的优先级等于线程优先。我想确保他们醒来并按优先顺序发帖,然而,我的应用程序表现得好像它们以先进先出的顺序醒来(即他们阻止的顺序)。每个阻塞线程是使用具有不同优先级的SCHED_FIFO策略进行调度系统级范围。我在Internet上上下搜索了一些描述如何这应该可以工作,我能找到的只是描述它的POSIX手册页如果优先级调度是支持。由于内核调度程序是优先调度程序我会认为线程会按优先顺序唤醒并发布到队列,但是情况似乎并非如此。我确定我是只是缺少一些细微的细节,希望这里的

linux - POSIX 消息队列 - mq_send 线程唤醒顺序

有人可以向我解释消息队列如何处理多个唤醒线程阻塞在单个消息队列上?我的情况是我有多个作者阻塞了一条完整的消息队列,每个发布消息的优先级等于线程优先。我想确保他们醒来并按优先顺序发帖,然而,我的应用程序表现得好像它们以先进先出的顺序醒来(即他们阻止的顺序)。每个阻塞线程是使用具有不同优先级的SCHED_FIFO策略进行调度系统级范围。我在Internet上上下搜索了一些描述如何这应该可以工作,我能找到的只是描述它的POSIX手册页如果优先级调度是支持。由于内核调度程序是优先调度程序我会认为线程会按优先顺序唤醒并发布到队列,但是情况似乎并非如此。我确定我是只是缺少一些细微的细节,希望这里的

php - 在 Linux 中使用 PHP 的 posix_kill() 导致奇怪的行为

我正在创建一个网页,用于监视和控制一些自定义C程序。我创建了一个页面,它将启动/停止一个C程序“启动器”(漂亮的通用名称),然后fork并创建许多子进程。开始工作正常-exec("cdlauncher_dir;nohup./launcher>outfile2>&1&");停止是有问题的地方。单击停止按钮后,两件事中的一件会随机发生。要么存在浏览器错误页面(101ConnectionReset或324EmptyResponse),要么页面加载了两次,但您只看到了第二次。我知道它加载两次的原因是因为代码中的调试消息。在这两种情况下,启动器进程都会被终止(发送SIGTERM)。但是如果页面加

php - 在 Linux 中使用 PHP 的 posix_kill() 导致奇怪的行为

我正在创建一个网页,用于监视和控制一些自定义C程序。我创建了一个页面,它将启动/停止一个C程序“启动器”(漂亮的通用名称),然后fork并创建许多子进程。开始工作正常-exec("cdlauncher_dir;nohup./launcher>outfile2>&1&");停止是有问题的地方。单击停止按钮后,两件事中的一件会随机发生。要么存在浏览器错误页面(101ConnectionReset或324EmptyResponse),要么页面加载了两次,但您只看到了第二次。我知道它加载两次的原因是因为代码中的调试消息。在这两种情况下,启动器进程都会被终止(发送SIGTERM)。但是如果页面加

c++ - 如果有 std::thread,Visual Studio 2017 linux 无法编译

所以我尝试使用VisualStudio2017创建一个Linux项目。我从一个空的Linux项目(作为项目模板)开始,到目前为止一切都很好。但是,如果我有//Createanewthreadfortheconnectiontoavoidclutterstd::threadnewConnectionHandler(connectionHandler,iNewConnection);newConnectionHandler.detach();在我的代码中,它不会编译。这些是我得到的错误:ErrorE0020identifier"__float128"isundefinedErrorInfu

c++ - 如果有 std::thread,Visual Studio 2017 linux 无法编译

所以我尝试使用VisualStudio2017创建一个Linux项目。我从一个空的Linux项目(作为项目模板)开始,到目前为止一切都很好。但是,如果我有//Createanewthreadfortheconnectiontoavoidclutterstd::threadnewConnectionHandler(connectionHandler,iNewConnection);newConnectionHandler.detach();在我的代码中,它不会编译。这些是我得到的错误:ErrorE0020identifier"__float128"isundefinedErrorInfu

linux - 在 i386 的 linux 内核 2.6.11 中,此内联汇编 (:"0"(THREAD_SIZE - 1)) 的含义是什么

在do_IRQ中可以找到如下代码!#ifdefCONFIG_DEBUG_STACKOVERFLOW/*Debuggingcheckforstackoverflow:istherelessthan1KBfree?*/{longesp;__asm____volatile__("andl%%esp,%0":"=r"(esp):"0"(THREAD_SIZE-1));if(unlikely(esp我没看懂这个asm汇编的意思asm_volatile_("andl%%esp,%0":"=r"(esp):"0"(THREAD_SIZE-1));THREAD_SIZE-1意味着什么?我记得括号里的符