如何解决如何以原子方式递增或递减非 std::atomic 整数类型
所以在 C++ 中,假设我有以下 16 字节类型,它可以在具有 const projectCards = [{
id: 1,dataId: "TAFE",title: "Identity System",category: "TAFE",img: "../img/image-plane.jpg",url: "../pages/graphic_design/tafe/tafe_company_identitySystem.html",},{
id: 2,title: "Audition/Show Posters",url: "../pages/graphic_design/tafe/tafe_show_posters.html",{
id: 3,title: "Programs",url: "../pages/graphic_design/tafe/tafe_show_programs.html",{
id: 4,title: "Tickets",url: "../pages/graphic_design/tafe/tafe_show_tickets.html",{
id: 5,title: "Postcards",url: "../pages/graphic_design/tafe/tafe_newsletter.html",{
id: 6,title: "Newsletter",url: "../pages/graphic_design/tafe/tafe_postcards.html",{
id: 7,dataId: "CAHQ",class: "entry-imgText",category: "CAHQ",img: "../img/image-currency.jpg",url: "../pages/graphic_design/cahq/cahq_identity_system.html",{
id: 8,title: "Marketing Materials",{
id: 9,title: "Website Icons",url: "../pages/graphic_design/cahq/cahq_website_icons.html",{
id: 10,dataId: "PWC",category: "PWC",img: "../img/image-restaurant.jpg",url: "../pages/graphic_design/pilates/pwc_company_identitySystem.html",{
id: 11,url: "../pages/graphic_design/pilates/pwc_marketing_materials.html",{
id: 12,dataId: "Photo Essays",title: "Columbia-Wrightsville Bridge",category: "Photo Essays",url: "../pages/graphic_design/photo_essays/columbia-wrightsville_bridge.html",{
id: 13,title: "Shift Focus",url: "../pages/graphic_design/photo_essays/shift_focus.html",{
id: 14,title: "A Commuter's View",url: "../pages/graphic_design/photo_essays/a_commuters_view.html",}
];
let projects = [{
id: 1,description: 'Lorem,ipsum dolor sit amet consectetur adipisicing elit. Nulla tenetur ab odio. Rerum cumque distinctio eveniet illum ea omnis non iure repudiandae labore quas aut optio aliquam dolorem,delectus doloribus!',date: '2016 - present',client: 'TAFE (Theater Arts For Everyone)',role: 'Graphic Designer',projectType: 'Layout (color + graphics)',programClass1: 'ai',programClass2: 'id',program1: 'Ai',program2: 'Id',category: "1",dataId: "2",category: "2",];
const portfolioHeadingContainer = document.getElementById('portfolio__headingContainer');
const portfolioContentContainer = document.getElementById('portfolio_content_container');
const buttonContainer = document.querySelector('button-container');
const filterProjects = document.querySelectorAll('.filter-projects');
const projectsBtn = document.querySelectorAll('.projects-btn');
const portfolioGrid = document.querySelector('.portfolio__grid');
const portfolioContent = document.querySelector('.portfolio__content');
// filter project items
filterProjects.forEach(function(btn) {
btn.addEventListener('click',function(e) {
const category = e.currentTarget.dataset.id;
const projectCategory = projectCards.filter(function(projectItem) {
if (projectItem.category === category) {
return projectItem;
}
});
if (category === "all") {
displayProjectItems(projectCards);
} else {
displayProjectItems(projectCategory);
}
});
});
// active
projectsBtn.forEach(button => {
button.addEventListener('click',function() {
projectsBtn.forEach(btn => btn.classList.remove('active'));
this.classList.add('active');
});
});
function displayProjectItems(projectItems) {
let displayProjectItem = projectItems.map(function(item) {
return `<a href="#" id="a" data-id="${item.dataId}" class="portfolio__item content-container project">
<img class="portfolio__image" src="${item.img}" alt="TAFE Logo" />
<div class="portfolio__clientName">
<h3 class="portfolio__clientName-text">${item.title}</h3>
</div> <!-- end portfolio__clientName -->
</a>`;
});
let displayTitle = projectItems.map(function(titleItem) {
return `<div id="headingContent" class="entry-image noIMG hide"><h2 class="text-title entry-imgText">${titleItem.category}</h2></div>`;
});
displayProjectItem = displayProjectItem.join("");
portfolioGrid.innerHTML = displayProjectItem;
displayTitle = displayTitle.join("");
portfolioHeadingContainer.innerHTML = displayTitle;
}
指令的 CPU 上进行原子操作:
<div id="portfolio_content_container">
<div class="portfolio__grid">
<!------------ Item 1 ------------>
<a href="#" class="portfolio__item filter-projects" data-id="TAFE">
<img class="portfolio__image" src="../img/image-confetti.jpg" alt="TAFE logo" />
<div class="portfolio__clientName">
<h3 class="portfolio__clientName-text">TAFE (Theatre Arts For Everyone)</h3>
</div>
<!-- end portfolio__clientName -->
</a>
<!------------ Item 2 ------------>
<a href="#" class="portfolio__item filter-projects" data-id="CAHQ">
<img class="portfolio__image" src="../img/image-confetti.jpg" alt="CAHQ Brochure" />
<div class="portfolio__clientName">
<h3 class="portfolio__clientName-text">College Admissions HQ</h3>
</div>
<!-- end portfolio__clientName -->
</a>
<!------------ Item 3 ------------>
<a href="#" class="portfolio__item filter-projects" data-id="PWC">
<img class="portfolio__image" src="../img/image-confetti.jpg" alt="pilates wellness center logo" />
<div class="portfolio__clientName">
<h3 class="portfolio__clientName-text">Pilates Wellness Center of York</h3>
</div>
<!-- end portfolio__clientName -->
</a>
<!------------ Item 4 ------------>
<a href="../pages/graphic_design/jane_daisy_general/jane_daisy_general.html" class="portfolio__item filter-projects" data-id=JDG ">
<img class="portfolio__image " src="../img/image-confetti.jpg " alt="jane dasie general logo " />
<div class="portfolio__clientName ">
<h3 class="portfolio__clientName-text ">Jane Daisy General</h3>
</div> <!-- end portfolio__clientName -->
</a>
<!------------ Item 5 ------------>
<a href="../pages/graphic_design/secondEncounter/secondEncounter.html " class="portfolio__item filter-projects " data-id="secondEncounter ">
<img class="portfolio__image " src="../img/image-confetti.jpg " alt="secondEncounter logo " />
<div class="portfolio__clientName ">
<h3 class="portfolio__clientName-text ">secondEncounter</h3>
</div> <!-- end portfolio__clientName -->
</a>
<!------------ Item 6 ------------>
<a href="# " class="portfolio__item filter-projects " data-id="DB ">
<img class="portfolio__image " src="../img/image-confetti.jpg " alt="Dobbs & Bishop " />
<div class="portfolio__clientName ">
<h3 class="portfolio__clientName-text ">Dobbs & Bishop Fine Cheese</h3>
</div> <!-- end portfolio__clientName -->
</a>
<!------------ Item 7 ------------>
<a href="../pages/graphic_design/yorkfest/yorkfest.html " class="portfolio__item filter-projects " data-id="Yorkfest ">
<img class="portfolio__image " src="../img/image-confetti.jpg " alt="Yorkfest Logo " />
<div class="portfolio__clientName ">
<h3 class="portfolio__clientName-text ">Yorkfest</h3>
</div> <!-- end portfolio__clientName -->
</a>
<!------------ Item 8 ------------>
<a href="../pages/graphic_design/lish/lish.html " class="portfolio__item filter-projects " data-id="Lish ">
<img class="portfolio__image " src="../img/image-confetti.jpg " alt="Lish Logo " />
<div class="portfolio__clientName ">
<h3 class="portfolio__clientName-text ">Lish</h3>
</div> <!-- end portfolio__clientName -->
</a>
<!------------ Item 9 ------------>
<a href="# " class="portfolio__item filter-projects " data-id="Photo Essays ">
<img class="portfolio__image " src="../img/image-confetti.jpg " alt="Columbia-Wrightsville Bridge Book Cover " />
<div class="portfolio__clientName ">
<h3 class="portfolio__clientName-text ">Photo Essays</h3>
</div> <!-- end portfolio__clientName -->
</a>
</div> <!-- end portfolio__grid-->
<div class="button-container-bottom ">
<a class="filter-projects active " type="button " data-id="graphicDesign ">Graphic Desing</a>
<a class="filter-projects " type="button " data-id="webDesign ">Web Design</a>
</div>
</div> <!-- end portfolio_content_container -->
但是,假设我可能只想在 cmpxchg16b
上执行原子增量,例如通过 #include <atomic>
#include <cstdio>
struct foo
{
size_t _x;
void* _y;
foo(size_t x = 3,void* y = nullptr): _x(x),_y(y){}
};
int main()
{
std::atomic<foo> f1;
foo f2;
foo f3(2,new int(4));
f1.compare_exchange_strong(f2,f3);
std::printf("is always lock free %s\n",std::atomic<foo>::is_always_lock_free ? "true" : "false" );
}
。我如何应用这样的原子操作而不必使用 _x
?我不想在这里使用它的原因是因为较大的 fetch_add
类型变得不可复制,并阻止我使用 16 字节的比较和交换,给出以下错误:
std::atomic<size_t>
所以我正在寻找一种方法来做类似的事情,
foo
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。