Предложение в стандарт C++ ConcurrentHashMap


Выделение Folly ConcurrentHashMap в общей памяти

Я пытаюсь выделить Folly Concurrent Hash Map на общей памяти с использованием Boost распределителя общей памяти.

но я получил следующую ошибку:

Я попытался обернуть распределитель общей памяти Boost распределителем, который имеет конструктор по умолчанию и статический член, который хранит экземпляр общей памяти Boost. Это устраняет ошибку компиляции, но возникает серьезная следующая проблема: Ошибка сегментации возникает из-за того, что Параллельная карта хэша не использует Allocator :: pointer (offset_ptr при использовании Boost allocator).

Предложение в стандарт C++: ConcurrentHashMap

Для доступа в Сбербанк Онлайн скачайте мобильное приложение или. Скачать позже

CookieSwirlC — YouTube

CookieswirlC’s mission is to inspire creativity and spread positivity around the world through fun uplifting videos that encourage learning and imagination .

Product reviews, how-tos, deals and the latest …

CNET is the world’s leader in tech product reviews, news, prices, videos, forums, how-tos and more.

C (programming language) — Wikipedia

C (/ s iː /, as in the letter c) is a general-purpose, procedural computer programming language supporting structured programming, lexical variable scope, and recursion, while a static type system prevents unintended operations.

C++ — Википедия

Несмотря на ряд известных недостатков языка c, Страуструп пошёл на его использование в качестве основы, так как «в c есть свои проблемы, но их имел бы и разработанный с нуля язык, а проблемы c нам известны».

Google

Search the world’s information, including webpages, images, videos and more. Google has many special features to help you find exactly what you’re looking for.

Портал государственных услуг — Здравоохранение .

Единый номер 8-800-550-50-30. Запись на прием к врачу по бесплатному номеру телефона или решение нестандартных вопросов


Sarantis-парфюмерия! — Гипермаркет парфюмерии!

Реклама Абсолютно реальные цены! Экспресс доставка! · пн-сб 10:00-19:00, вс 10:00-18:00

Адаптер HP Z8W90AA USB C to A Hub

Реклама Адаптер HP Z8W90AA USB C to A Hub. Кабели и переходники.

ConcurrentHashMap для C ++

Есть ли ConcurrentHashMap для с реализации ++ или что-то похоже где-нибудь?

Я не могу понять, почему многопоточность в C ++ является настолько сложно, чем Java!

Темы Арента действительно поддерживаются в C ++, так что разве что-нибудь в стандарте про потокобезопасные контейнеры. Люди, очевидно, сделали их раньше.

Я думаю , что эта вещь от Intel может помочь https://www.threadingbuildingblocks.org/

Я никогда не использовал его сам еще так не guarentees.

Вы также можете просто обернуть любой контейнер в собственном классе с семафором, чтобы сделать его поточно.

Существует новая библиотека с открытым исходным кодом под названием junction доступна , который содержит несколько новых параллельных карт.

Это BSD-лицензия, так что вы можете использовать исходный код свободно в любом проекте, для любых целей.

Найти более подробную информацию в этом BlogPost.

Как вы многопоточность зависит от вашей операционной системы. Для окон можно использовать MFC (Visual Studio делает это довольно легко) или использовать #include «windows.h» и использовать методы, как CreateMutex и WaitForSingleObject. Вот простой пример:

Я написал несколько поточно-контейнеров. Я считаю, что это часто, как быстро в C ++, чтобы узнать концепцию безопасности потока очень хорошо, а затем реализовать его как диктует ваша потребность. Таким образом, вы действительно понимаете, все затраты и выгоды от того, что делает JAVA для вас.

Кстати, причина того, что делает этот материал тверже в C ++, потому что C ++ является более мощным языком, который позволяет делать все, что вам нужно сделать, что является полезным и опасным.


Я уверен, что если вы посмотрите на CodeProject или в библиотеке буста, вы найдете некоторые хорошие примеры поточно-контейнеров.

ConcurrentHashMap для C++

Есть ли ConcurrentHashMap для реализации на C++ или что-то подобное в любом месте?

Я не могу понять, почему многопоточность на C++ настолько сложна, чем Java!

Создан 23 дек. 11 2011-12-23 16:13:55 rodi

Многопоточность настолько сложна, что перед выпуском стандарта C++ 11 не было официальной модели памяти, которая ее поддерживала. – Michael Kristofik 23 дек. 11 2011-12-23 16:19:55

4 ответа

Нити arent действительно поддерживаются на C++, поэтому в стандарте нет контейнеров с потоками. Люди, очевидно, сделали их раньше.

Я думаю, что эта вещь от Intel может помочь https://www.threadingbuildingblocks.org/

Я никогда не использовал его сам еще так не guarentees.

Вы также можете просто обернуть любой контейнер в своем классе с помощью семафора, чтобы сделать его потокобезопасным.

Создан 23 дек. 11 2011-12-23 16:18:25 bashirs

C++ 11 полностью определяет модель потоковой передачи. – edA-qa mort-ora-y 23 дек. 11 2011-12-23 18:21:14

оба из hasbmaps tbb не используют одни и те же совпадающие свойства, такие как CHA java – easytiger 23 янв. 14 2014-01-23 09:24:23

Этот комментарий старый сейчас :), поскольку потоки (стандартные cpp) теперь поддерживаются в C++ 11 и далее – siddhusingh 09 сен. 15 2015-09-09 12:03:58

Создан 23 дек. 11 2011-12-23 16:19:08 ali_bahoo

есть ли у меня его? – rodi 23 дек. 11 2011-12-23 16:25:57


@rodi: Ну, есть бесплатная версия библиотеки ‘tbb’, но она находится под лицензией GPL. – ali_bahoo 23 дек. 11 2011-12-23 16:28:55

есть реализация в пакете образцов concrt на code.msdn.com/concrtextras – Rick 25 дек. 11 2011-12-25 04:06:24

Они не функционально эквивалентны CHM – easytiger 26 мар. 15 2015-03-26 13:36:01

Как сделать многопоточность зависит от вашей операционной системы. Для окон вы можете использовать MFC (Visual Studio делает это довольно просто) или использовать #include «windows.h» и использовать такие методы, как CreateMutex и WaitForSingleObject. Вот краткий пример:

Я написал несколько поточно-безопасных контейнеров. Я нахожу, что в C++ часто бывает так быстро, чтобы хорошо понять концепцию безопасности потоков, а затем реализовать ее по мере необходимости. Таким образом, вы действительно понимаете всю стоимость и преимущества того, что JAVA делает для вас.

К слову, причина, по которой делать этот материал сложнее в C++, состоит в том, что C++ — это более мощный язык, который позволяет делать все, что вам нужно, что полезно и опасно.

Я уверен, что если вы посмотрите на CodeProject или в библиотеке boost, вы найдете несколько хороших примеров поточно-безопасных контейнеров.

Создан 23 дек. 11 2011-12-23 16:31:45 Ian

Доступна новая библиотека с открытым исходным кодом под названием junction , которая содержит несколько новых параллельных карт.

Это BSD-лицензии, так что вы можете использовать исходный код свободно в любом проекте, для любых целей.

Предложение в стандарт C++: ConcurrentHashMap

Retrieval operations (including get ) generally do not block, so may overlap with update operations (including put and remove ). Retrievals reflect the results of the most recently completed update operations holding upon their onset. (More formally, an update operation for a given key bears a happens-before relation with any (non-null) retrieval for that key reporting the updated value.) For aggregate operations such as putAll and clear , concurrent retrievals may reflect insertion or removal of only some entries. Similarly, Iterators, Spliterators and Enumerations return elements reflecting the state of the hash table at some point at or since the creation of the iterator/enumeration. They do not throw ConcurrentModificationException . However, iterators are designed to be used by only one thread at a time. Bear in mind that the results of aggregate status methods including size , isEmpty , and containsValue are typically useful only when a map is not undergoing concurrent updates in other threads. Otherwise the results of these methods reflect transient states that may be adequate for monitoring or estimation purposes, but not for program control.

Мастер Йода рекомендует:  Руководство по анимации SVG (SMIL)

The table is dynamically expanded when there are too many collisions (i.e., keys that have distinct hash codes but fall into the same slot modulo the table size), with the expected average effect of maintaining roughly two bins per mapping (corresponding to a 0.75 load factor threshold for resizing). There may be much variance around this average as mappings are added and removed, but overall, this maintains a commonly accepted time/space tradeoff for hash tables. However, resizing this or any other kind of hash table may be a relatively slow operation. When possible, it is a good idea to provide a size estimate as an optional initialCapacity constructor argument. An additional optional loadFactor constructor argument provides a further means of customizing initial table capacity by specifying the table density to be used in calculating the amount of space to allocate for the given number of elements. Also, for compatibility with previous versions of this class, constructors may optionally specify an expected concurrencyLevel as an additional hint for internal sizing. Note that using many keys with exactly the same hashCode() is a sure way to slow down performance of any hash table. To ameliorate impact, when keys are Comparable , this class may use comparison order among keys to help break ties.

A Set projection of a ConcurrentHashMap may be created (using newKeySet() or newKeySet(int) ), or viewed (using keySet(Object) when only keys are of interest, and the mapped values are (perhaps transiently) not used or all take the same mapping value.

A ConcurrentHashMap can be used as scalable frequency map (a form of histogram or multiset) by using LongAdder values and initializing via computeIfAbsent . For example, to add a count to a ConcurrentHashMap freqs , you can use freqs.computeIfAbsent(k -> new LongAdder()).increment();

This class and its views and iterators implement all of the optional methods of the Map and Iterator interfaces.

Like Hashtable but unlike HashMap , this class does not allow null to be used as a key or value.


ConcurrentHashMaps support a set of sequential and parallel bulk operations that, unlike most Stream methods, are designed to be safely, and often sensibly, applied even with maps that are being concurrently updated by other threads; for example, when computing a snapshot summary of the values in a shared registry. There are three kinds of operation, each with four forms, accepting functions with Keys, Values, Entries, and (Key, Value) arguments and/or return values. Because the elements of a ConcurrentHashMap are not ordered in any particular way, and may be processed in different orders in different parallel executions, the correctness of supplied functions should not depend on any ordering, or on any other objects or values that may transiently change while computation is in progress; and except for forEach actions, should ideally be side-effect-free. Bulk operations on Map.Entry objects do not support method setValue .

  • forEach: Perform a given action on each element. A variant form applies a given transformation on each element before performing the action.
  • search: Return the first available non-null result of applying a given function on each element; skipping further search when a result is found.
  • reduce: Accumulate each element. The supplied reduction function cannot rely on ordering (more formally, it should be both associative and commutative). There are five variants:
    • Plain reductions. (There is not a form of this method for (key, value) function arguments since there is no corresponding return type.)
    • Mapped reductions that accumulate the results of a given function applied to each element.
    • Reductions to scalar doubles, longs, and ints, using a given basis value.

These bulk operations accept a parallelismThreshold argument. Methods proceed sequentially if the current map size is estimated to be less than the given threshold. Using a value of Long.MAX_VALUE suppresses all parallelism. Using a value of 1 results in maximal parallelism by partitioning into enough subtasks to fully utilize the ForkJoinPool.commonPool() that is used for all parallel computations. Normally, you would initially choose one of these extreme values, and then measure performance of using in-between values that trade off overhead versus throughput.

The concurrency properties of bulk operations follow from those of ConcurrentHashMap: Any non-null result returned from get(key) and related access methods bears a happens-before relation with the associated insertion or update. The result of any bulk operation reflects the composition of these per-element relations (but is not necessarily atomic with respect to the map as a whole unless it is somehow known to be quiescent). Conversely, because keys and values in the map are never null, null serves as a reliable atomic indicator of the current lack of any result. To maintain this property, null serves as an implicit basis for all non-scalar reduction operations. For the double, long, and int versions, the basis should be one that, when combined with any other value, returns that other value (more formally, it should be the identity element for the reduction). Most common reductions have these properties; for example, computing a sum with basis 0 or a minimum with basis MAX_VALUE.

Search and transformation functions provided as arguments should similarly return null to indicate the lack of any result (in which case it is not used). In the case of mapped reductions, this also enables transformations to serve as filters, returning null (or, in the case of primitive specializations, the identity basis) if the element should not be combined. You can create compound transformations and filterings by composing them yourself under this «null means there is nothing there now» rule before using them in search or reduce operations.

Methods accepting and/or returning Entry arguments maintain key-value associations. They may be useful for example when finding the key for the greatest value. Note that «plain» Entry arguments can be supplied using new AbstractMap.SimpleEntry(k,v) .

Bulk operations may complete abruptly, throwing an exception encountered in the application of a supplied function. Bear in mind when handling such exceptions that other concurrently executing functions could also have thrown exceptions, or would have done so if the first exception had not occurred.

Speedups for parallel compared to sequential forms are common but not guaranteed. Parallel operations involving brief functions on small maps may execute more slowly than sequential forms if the underlying work to parallelize the computation is more expensive than the computation itself. Similarly, parallelization may not lead to much actual parallelism if all processors are busy performing unrelated tasks.

All arguments to all task methods must be non-null.

This class is a member of the Java Collections Framework.

4.4 Concurrent Hash Map

Чтобы просмотреть это видео, включите JavaScript и используйте веб-браузер, который поддерживает видео в формате HTML5

Concurrent Programming in Java

Half Faded Star

This course teaches learners (industry professionals and students) the fundamental concepts of concurrent programming in the context of Java 8. Concurrent programming enables developers to efficiently and correctly mediate the use of shared resources in parallel programs. By the end of this course, you will learn how to use basic concurrency constructs in Java such as threads, locks, critical sections, atomic variables, isolation, actors, optimistic concurrency and concurrent collections, as well as their theoretical foundations (e.g., progress guarantees, deadlock, livelock, starvation, linearizability). Why take this course? • It is important for you to be aware of the theoretical foundations of concurrency to avoid common but subtle programming errors. • Java 8 has modernized many of the concurrency constructs since the early days of threads and locks. • During the course, you will have online access to the instructor and mentors to get individualized answers to your questions posted on the forums. • Each of the four modules in the course includes an assigned mini-project that will provide you with the necessary hands-on experience to use the concepts learned in the course on your own, after the course ends. The desired learning outcomes of this course are as follows: • Concurrency theory: progress guarantees, deadlock, livelock, starvation, linearizability • Use of threads and structured/unstructured locks in Java • Atomic variables and isolation • Optimistic concurrency and concurrent collections in Java (e.g., concurrent queues, concurrent hashmaps) • Actor model in Java Mastery of these concepts will enable you to immediately apply them in the context of concurrent Java programs, and will also help you master other concurrent programming system that you may encounter in the future (e.g., POSIX threads, .NET threads).

Мастер Йода рекомендует:  Что могут спросить на собеседовании подборка задач Ферми

Получаемые навыки


Concurrency (Computer Science), Actor Model, Optimistic Concurrency Control, Java Concurrency

Рецензии

Half Faded Star

Short and easy to understand multi-threading with locks, object-based isolation, Actors, Atomic values and optimistic concurrency.

Hard course, we need more assignments, small chunks. Making assignments for courses like these is not trivial as well.

In this module, we will study Concurrent Data Structures, which form an essential software layer in all multithreaded programming systems. First, we will learn about Optimistic Concurrency, an important multithreaded pattern in which two threads can «optimistically» make progress on their assigned work without worrying about mutual conflicts, and only checking for conflicts before «committing» the results of their work. We will then study the widely-used Concurrent Queue data structure. Even though the APIs for using concurrent queues are very simple, their implementations using the Optimistic Concurrency model can be complex and error-prone. To that end, we will also learn the formal notion of Linearizability to better understand correctness requirements for concurrent data structures. We will then study Concurrent Hash Maps, another widely-used concurrent data structure. Finally, we discuss a concurrent algorithm for finding a Minimum Spanning Tree of an undirected graph, an algorithm that relies on the use of Concurrent Data Structures under the covers.

Преподаватели

Vivek Sarkar

Текст видео

Java provides a number of very useful concurrent data structures for programmers. And we will look at one of them that comes in very handy, it’s called Concurrent Hashmap. So when you look at the Java concurrency utilities, you’ll find examples like Concurrent Hashmap, Concurrent Linked Queue, Concurrent Skip List Set. So the concurrent hashmap implements methods that are already known to you in the map interface, but also adds some methods. So you will have methods like GET, which takes a key and returns a value of any from the map. You will have PUT, where you can put a key and a value. One interesting extension for the concurrent hashmap relative to sequential is PUT IF ABSENT, a key-value pair. And the idea over here is that you may have multiple threads trying to insert an item with the same key into the map. And putIfAbsent will ensure that you preserve the correct property of a map which is that there should be only one instance of a given key. So it will only do the insertion if there’s no existing item with that key. And so if multiple threads are attempting it with the same key, only one of them will succeed. Now, these are all linearizable with respect to each other, which means it’s completely safe for multiple threads to be calling these operations in parallel. There are some other operations that are not linearizable, and these tend to be more aggregate operations on the hash map. So, for example, you may have CLEAR or PUT ALL, these are operations that are not linearizable. Whereas these are linearizable. And so what that means is you have to be careful to ensure that you don’t call CLEAR in parallel with a GET or a PUT or PUT IF ABSENT. Now, you can use these for all kinds of applications. So, for example, if you wanted to build a file system, and you just want it to have a directory object. If you wanted to add a file to the system, all you need to do is do a directory PUT IF ABSENT. The name of the file is the key, and the file. So this way, multiple threads could be trying to insert a file with the same name into the directory. And in this case, PUT IF ABSENT returns null if it succeeded. Meaning that a null return value confirms that there wasn’t an existing file. On the other hand, if two threads attempted to insert the same file into the directory, one of them will succeed, the other will return the non-null value which is the current value for that given key. And it will know to issue an error message to say that the second insertion did not work. You can do the same thing with remove. And there again, there’ll be a return code to indicate success or not. So what we’ve seen is that for us as Java programmers, we have a number of options to use as concurrent data structures. And I would really encourage you to use the standard libraries as far as possible, instead of building your own low level data structures. And we looked closely at concurrent hash map, where certain operations are linearizable, they are thread safe with respect to each other. They can be called in parallel. And other operations are not linearizable and will need to be performed in some kind of mutual exclusion to make sure you don’t get the wrong answer. So with that, I hope you enjoy using these Java concurrent objects.

Thread safe tbb::concurrent_hash_map and std::set

I have a basic websocket server implemented in C++. I’m using Intel TBB’s concurrent hash_map to store all the users, uniquely identified by the id. The concurrent hash map will hold a key value pair of and > where the int is the user’s id, and the > is a set of all instances of the user. In this example, I just used string, but in production, it’ll be a websocket object such as uWS::WebSocket * .

When the user connects, we add it to the hash map: if the user is already in the hash_map , then it should just add the user instance in the user’s corresponding value . If the user is not in the hash_map , then we create a new pair and add the user.

I’ve attached my full code here. I’m expecting about 50,000 users at any given time connected. I have two questions:

  • Is my code thread safe? When I executed it on multiple threads, I didn’t find any race conditions or deadlocks, but that doesn’t mean there aren’t any.
  • Can you give any suggestions on how to improve my code, both performance and maintainability wise?

1 Answer 1


C Style

Your code looks more like c than c++, which might be fine for what you are trying to achieve but in general i’d like to see more abstraction and encapsulation.

Unless your environment is very constrained with regard to the use of c+11 (and up) there is no reason not to use smart pointers, std::unique_ptr and std::shared_ptr actually help writing multithreaded code as ownership of dynamically allocated classes becomes explicit. Use nullptr instead of NULL

Мастер Йода рекомендует:  Самый сложный баг Дэйва Баджета

typedef for shortcuts

It’s a little bit minor but if you are already creating typedefs for certain types you might as well give the more expressive names. WHAT is it that is being defined Usertable , etc .

Comment your business case not the functionality that you are executing

Your comments paraphrase the code that is in the functions they mix a little bit of the functions that are being executed with some of the domain language that you are using «User» and «Connection» for example. But I really can’t quite fathom what you are tracking and how. e.g. you use key a key is literally anything, connectionId or userId would make everything more understandable. Having a correct encapsulation class ConnectionTable , or whatever the hash_map is supposed to be would help.

Comment what can’t be seen in the code

// return set* on found, otherwise null is an almost useless comment I can see that from the code. Comment your assumptions coming in, comment in language of your domain. Don’t comment the obvious

Use Multithreaded tests

If you want to test whether code is correct under multithreaded conditions you have to test using multiple thread, the test code that you posted here doesn’t reflect that, while it seems to verify the single threaded behavior of your code, it doesn’t test multithreaded behavior. With that said correctly running multithreaded tests don’t necessarily mean that the code is bug free. You said you have these tests without looking at the code we can’t tell you if they are valid or not

Not threadsafe

Your code is not threadsafe, in remove you don’t seem to acquire the accessor to the find result, this means that the access to the result pair would not be threadsafe with regard to the other functions accessing that pair. Any operations on list_of_users is not threadsafe at that time.

You also return set* from your find function, any user of find can now modify the set at will breaking thread safety. At least returning const set* would prevent callers from modifying the result. But access to set could still collide with changes to the set only returning a copy at this point would prevent problems.

ConcurrentHashMap для C++

Есть ли ConcurrentHashMap для реализации на C++ или что-то подобное в любом месте?

Я не могу понять, почему многопоточность на C++ настолько сложна, чем Java!


Создан 23 дек. 11 2011-12-23 16:13:55 rodi

Многопоточность настолько сложна, что перед выпуском стандарта C++ 11 не было официальной модели памяти, которая ее поддерживала. – Michael Kristofik 23 дек. 11 2011-12-23 16:19:55

4 ответа

Нити arent действительно поддерживаются на C++, поэтому в стандарте нет контейнеров с потоками. Люди, очевидно, сделали их раньше.

Я думаю, что эта вещь от Intel может помочь https://www.threadingbuildingblocks.org/

Я никогда не использовал его сам еще так не guarentees.

Вы также можете просто обернуть любой контейнер в своем классе с помощью семафора, чтобы сделать его потокобезопасным.

Создан 23 дек. 11 2011-12-23 16:18:25 bashirs

C++ 11 полностью определяет модель потоковой передачи. – edA-qa mort-ora-y 23 дек. 11 2011-12-23 18:21:14

оба из hasbmaps tbb не используют одни и те же совпадающие свойства, такие как CHA java – easytiger 23 янв. 14 2014-01-23 09:24:23

Этот комментарий старый сейчас :), поскольку потоки (стандартные cpp) теперь поддерживаются в C++ 11 и далее – siddhusingh 09 сен. 15 2015-09-09 12:03:58

Создан 23 дек. 11 2011-12-23 16:19:08 ali_bahoo

есть ли у меня его? – rodi 23 дек. 11 2011-12-23 16:25:57

@rodi: Ну, есть бесплатная версия библиотеки ‘tbb’, но она находится под лицензией GPL. – ali_bahoo 23 дек. 11 2011-12-23 16:28:55

есть реализация в пакете образцов concrt на code.msdn.com/concrtextras – Rick 25 дек. 11 2011-12-25 04:06:24

Они не функционально эквивалентны CHM – easytiger 26 мар. 15 2015-03-26 13:36:01

Как сделать многопоточность зависит от вашей операционной системы. Для окон вы можете использовать MFC (Visual Studio делает это довольно просто) или использовать #include «windows.h» и использовать такие методы, как CreateMutex и WaitForSingleObject. Вот краткий пример:


Я написал несколько поточно-безопасных контейнеров. Я нахожу, что в C++ часто бывает так быстро, чтобы хорошо понять концепцию безопасности потоков, а затем реализовать ее по мере необходимости. Таким образом, вы действительно понимаете всю стоимость и преимущества того, что JAVA делает для вас.

К слову, причина, по которой делать этот материал сложнее в C++, состоит в том, что C++ — это более мощный язык, который позволяет делать все, что вам нужно, что полезно и опасно.

Я уверен, что если вы посмотрите на CodeProject или в библиотеке boost, вы найдете несколько хороших примеров поточно-безопасных контейнеров.

Создан 23 дек. 11 2011-12-23 16:31:45 Ian

Доступна новая библиотека с открытым исходным кодом под названием junction , которая содержит несколько новых параллельных карт.

Это BSD-лицензии, так что вы можете использовать исходный код свободно в любом проекте, для любых целей.

Предложение в стандарт C++: ConcurrentHashMap

Для доступа в Сбербанк Онлайн скачайте мобильное приложение или. Скачать позже

CookieSwirlC — YouTube

CookieswirlC’s mission is to inspire creativity and spread positivity around the world through fun uplifting videos that encourage learning and imagination .

Product reviews, how-tos, deals and the latest …

CNET is the world’s leader in tech product reviews, news, prices, videos, forums, how-tos and more.

C (programming language) — Wikipedia

C (/ s iː /, as in the letter c) is a general-purpose, procedural computer programming language supporting structured programming, lexical variable scope, and recursion, while a static type system prevents unintended operations.

C++ — Википедия

Несмотря на ряд известных недостатков языка c, Страуструп пошёл на его использование в качестве основы, так как «в c есть свои проблемы, но их имел бы и разработанный с нуля язык, а проблемы c нам известны».

Google


Search the world’s information, including webpages, images, videos and more. Google has many special features to help you find exactly what you’re looking for.

Портал государственных услуг — Здравоохранение .

Единый номер 8-800-550-50-30. Запись на прием к врачу по бесплатному номеру телефона или решение нестандартных вопросов

Реклама C. Отличные репетиторы из нашей базы. Быстрый и бесплатный подбор! · пн-пт 8:00-23:00, сб-вс 9:00-22:00

ConcurrentHashMap для C ++

Есть ли ConcurrentHashMap для с реализации ++ или что-то похоже где-нибудь?

Я не могу понять, почему многопоточность в C ++ является настолько сложно, чем Java!

Темы Арента действительно поддерживаются в C ++, так что разве что-нибудь в стандарте про потокобезопасные контейнеры. Люди, очевидно, сделали их раньше.

Я думаю , что эта вещь от Intel может помочь https://www.threadingbuildingblocks.org/

Я никогда не использовал его сам еще так не guarentees.

Вы также можете просто обернуть любой контейнер в собственном классе с семафором, чтобы сделать его поточно.

Существует новая библиотека с открытым исходным кодом под названием junction доступна , который содержит несколько новых параллельных карт.

Это BSD-лицензия, так что вы можете использовать исходный код свободно в любом проекте, для любых целей.

Найти более подробную информацию в этом BlogPost.

Как вы многопоточность зависит от вашей операционной системы. Для окон можно использовать MFC (Visual Studio делает это довольно легко) или использовать #include «windows.h» и использовать методы, как CreateMutex и WaitForSingleObject. Вот простой пример:

Я написал несколько поточно-контейнеров. Я считаю, что это часто, как быстро в C ++, чтобы узнать концепцию безопасности потока очень хорошо, а затем реализовать его как диктует ваша потребность. Таким образом, вы действительно понимаете, все затраты и выгоды от того, что делает JAVA для вас.

Кстати, причина того, что делает этот материал тверже в C ++, потому что C ++ является более мощным языком, который позволяет делать все, что вам нужно сделать, что является полезным и опасным.

Я уверен, что если вы посмотрите на CodeProject или в библиотеке буста, вы найдете некоторые хорошие примеры поточно-контейнеров.

Добавить комментарий