我编写了一个非常简单的代码来填充具有常量值(1024)的32x32 16bpp图像.图像缓冲区由a托管std::vector.我的图像的音高/步幅(即两个连续行之间的字节数)足够大以容纳整行,但设置为奇数.这是我的代码:
#include <vector>
#include <stdint.h>
int main()
{
int width = 32;
int height = 32;
int pitch = width * 2 + 1;
std::vector<uint8_t> image(height * pitch);
uint8_t* buffer = &image[0];
for (int y = 0; y < height; y++)
{
uint16_t* p = reinterpret_cast<uint16_t*>(buffer + y * pitch);
for (int x = 0; x < width; x++, p++)
{
*p = 1024;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我使用Linux x86_64和gcc 4.6.1(Ubuntu 11.10).该代码运行正常使用-O0, …
我目前正在设计一个具有大规模同步模式的C++跨平台(Linux/Windows)服务器应用程序.我在内部使用boost :: thread作为特定于操作系统的线程的抽象.我的问题是保护数据数组,数组的每个元素都受独立的读/写锁保护.
我的数组包含4096个元素.考虑到" 信号量小书 "(第85页)中提出的"作者优先级读者 - 作者"问题的解决方案,我的应用程序每个数组元素需要5个信号量.这总共提供了大约20000个信号量(或者,相当于20000个互斥量+ 20000个条件变量).
我的应用程序的另一个特点是在给定时间内,大多数信号量都不活动(通常有大约32个"客户端"线程在数千个信号量上等待/发送信号).请注意,由于整个服务器在单个进程中运行,因此我使用轻量级,基于线程的信号量(不是进程间信号量).
我的问题是双重的:
是否建议在Linux和Windows上为单个进程创建总计20000个信号量?嗯,当然,我想情况并非如此......
如果不推荐这种做法,我可以使用什么技术来减少实际信号量的数量,例如在1个实际信号量的顶部创建一组N个"模拟信号量"?我想这将是一个有趣的解决方案,因为我的大多数信号量在给定时间都处于非活动状态.
提前致谢!
深入研究Boost源代码,我发现:
其中的原因似乎并不清楚.特别是,在Windows下使用"boost :: shared_mutex"的进程间对象对我来说似乎不是最优的.
我对使用NEON指令的Android的VLC非官方端口感兴趣:
即使具有NEON指令集的Android智能手机确实存在,我也无法发现任何支持NEON的Android平板电脑.在欧洲有没有这样的Android桌子可供出售?