posix 相关问题

POSIX(可移植操作系统接口)是一组标准,用于定义编程API,命令解释器以及类Unix操作系统的通用实用程序。

Linux 上使用默认 (SCHED_OTHER) 调度策略的每线程调度优先级

我正在尝试实现一个跨平台包装器来调整当前线程优先级;在 POSIX 上,“正确”的事情看起来像 /// 设置当前t的优先级调整...

回答 1 投票 0

mq_open:参数无效

我正在尝试运行 mq_notify 手册页中找到的 POSIX 消息队列示例程序。我将其作为 ./mq '/bla' 运行,它给出了错误 mq_open: Invalid argument。 这是我...

回答 2 投票 0

涉及 pthreads 的最琐碎的 C 程序中出现奇怪的零星错误

下面是一个简单程序的 C 源代码。 该程序有一个主循环,要求用户在 3 个选项之间进行选择: 1-打印一些文本 2-做一些工作(没有副作用) 3-退出...

回答 1 投票 0

Posix 消息队列:消息(结构类型)总是太长

我开始学习在C中使用Posix消息队列。(我的主机是Kubuntu 22.04) 我正在尝试编写一个程序,该程序启动指定数量的正在等待消息的线程(消息= ...

回答 1 投票 0

为什么 macOS 上的 FIFO 管道比匿名管道慢约 8 倍?

在 M1 Max 上,我使用 mkfifo 创建了一个 FIFO 命名管道,并使用简单的 C 程序和 pv 测试写入/读取性能。该程序一次向 stdout 写入 65536 个字节。当做 ./wri...

回答 1 投票 0

POSIX 标准和信号量语义

我正在尝试理解信号量的语义。 这是一些代码: #包括 #包括 #包括 #包括 #包括 我正在尝试理解信号量的语义。 这是一些代码: #include <semaphore.h> #include <stdio.h> #include <stdlib.h> #include <pthread.h> #include <unistd.h> sem_t sem; void *helper(void *arg) { sem_wait(&sem); printf("helper woke up\n"); } int main() { sem_init(&sem, 0, 0); pthread_t tid; pthread_create(&tid, NULL, helper, NULL); sleep(1); sem_post(&sem); sem_wait(&sem); printf("main woke up\n"); exit(0); } 这里 main 创建一个辅助线程,休眠一秒钟以(几乎)确定辅助线程已运行并等待信号量,然后尝试快速连续地发布并等待信号量。根据 POSIX (https://pubs.opengroup.org/onlinepubs/009695399/functions/sem_post.html): 如果此操作产生的信号量值为零,则应允许阻塞等待信号量的线程之一从其对 sem_wait() 的调用中成功返回。 所以,我希望打印“助手醒来”。但是,如果您实际上在 Linux 上运行此代码,通常会观察到“main 唤醒”,这意味着默认情况下 Linux 上的信号量是允许不公平的。 我的问题是:为什么允许这种行为?是的,你可以说“它更容易实现”,但这并不能解释为什么信号量是用这些特定的语义设计的。 在其他地方,(https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Semaphore.html)它表示这种行为在某些情况下更可取。在什么情况下非公平信号量更好?我将不胜感激有关此主题的任何详细资料。 这样做的一个更好的方法是它减少了上下文切换。允许调用 sem_post() 的线程继续运行,而不必恢复在 sem_wait() 中阻塞的线程。 当调度程序决定解除哪个线程的阻塞时,主线程已调用 sem_wait()。然后它选择要解除封锁的服务员。然后,它可以根据调度优先级(如引用段落的其余部分所述)或任意选择。并且它可能会选择主线程以避免上下文切换。

回答 1 投票 0


POSIX C 非阻塞读取套接字

我正在尝试创建一个线程来从套接字描述符中读取。我需要使用非阻塞循环来检查当前时间并在会话结束后关闭套接字,但 FD_ISSET 返回 0

回答 2 投票 0

消息队列IPC无法正常工作

此代码使用 C 语言实现了一个简单的客户端-服务器通信系统。 本地.h #包括 #包括 #include“sys/ipc.h” #包括<...

回答 1 投票 0

定义 _POSIX_C_SOURCE 时,在 MacOS 上编译失败并出现奇怪的错误

具有以下编译器标志: -std=c11 -Werror -Wpedantic Oracle Solaris 14.6 要求为 Clock_gettime() 的声明定义 _POSIX_C_SOURCE/_XOPEN_SOURCE,该函数使用...

回答 1 投票 0

为线程设置新优先级时不允许操作

我创建了两个线程。默认情况下,它们的优先级为 0,我可以使用 pthread_getschedparam 然后我尝试分别增加它们的优先级为 2 和 3。但是当我尝试...

回答 4 投票 0

在 R 中,如何创建时间间隔的直方图?

我有一张工作开始和停止时间的表,我想绘制它。输入表如下所示: 作业开始时间 工作完成时间 位置 2024-04-29 18:35:09 2024-04-29 19:36:25 1 202...

回答 1 投票 0

C++ 错误:未定义对“clock_gettime”和“clock_settime”的引用

我对 Ubuntu 还很陌生,但我似乎无法让它工作。它在我学校的计算机上运行良好,我不知道我没有做什么。我已经检查了 usr/include 和 time.h 是否存在...

回答 5 投票 0

为什么第二个或循环的 select() 会阻塞?

在使用管道时,我在 select() 处被阻塞。当我们在 stdin 上获取数据时,第一个 select() 将解除阻塞(我只需输入一个字母并按 Enter 键)。 然后我将数据写入写入端...

回答 1 投票 0

是否可以对管道进行读而不是块,而是写块?

man 2 select 在 BUGS 下指出以下内容: 在 Linux 下,select() 可能会将套接字文件描述符报告为“ready for” 读取”,而随后的读取会阻塞。这可能......

回答 1 投票 0

为什么在 vfork() 之后关闭同一个 fd 不会导致错误?

我有以下代码片段,它打开一个文件并尝试在子进程中 grep 其中的某些内容。使用 vfork() + exec() 生成子进程。 FILE *file = fopen("文件名.txt"...

回答 1 投票 0

Linux 上的 limit.h、getconf/sysconf 之间的 SSIZE_MAX 不同值

我在 64 位 Linux 计算机上遇到一个问题,其中 getconf 命令和 sysconf() 函数将 SSIZE_MAX 的值报告为 32767,这是 POSIX 要求的最小值。

回答 1 投票 0

我可以同时从多个线程调用一个套接字的accept()吗?

我使用的是Linux 3.2.0,x86_64。 我可以同时从多个线程调用一个套接字的accept()吗?

回答 1 投票 0

TCP/IP 套接字发送的字节数是否可以少于通过 write()/send() 请求的字节数?

根据我的基础知识,我希望代表 TCP/IP 连接的套接字能够保证所请求数据的传递。那么,是否存在 send() 或 write() 的返回值是

回答 1 投票 0

PosixAIO:aio_error返回38(未实现)但errno为0(成功)

我的代码在本机 Linux 系统上运行得很好,但是当我在 WSL 上运行它时,似乎出了问题。 以下是我发送 AsyncWrites 的方式: 状态 PosixAIOEngine::AsyncWrite(int fd, uint64_t offs...

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.